SDRAMverilog串口例程Word文档格式.docx
- 文档编号:21762438
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:32
- 大小:45.12KB
SDRAMverilog串口例程Word文档格式.docx
《SDRAMverilog串口例程Word文档格式.docx》由会员分享,可在线阅读,更多相关《SDRAMverilog串口例程Word文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
//SDRAM写允许位
output[1:
0]sdram_ba;
//SDRAM的L-Bank地址线
output[11:
0]sdram_addr;
//SDRAM地址总线
//outputsdram_udqm;
//SDRAM高字节屏蔽
//outputsdram_ldqm;
//SDRAM低字节屏蔽
inout[15:
0]sdram_data;
//SDRAM数据总线
outputrs232_tx;
//RS232发送数据信号
////////////////////////////////////////////////
//SDRAM的封装接口测试引出
/*outputsdram_rd_req;
//系统读SDRAM请求信号
outputsdram_wr_ack;
//系统写SDRAM响应信号
outputsdram_rd_ack;
//系统读SDRAM响应信号
output[15:
0]sys_data_in;
//写SDRAM时数据暂存器,4个突发读写字数据,默认为00地址bit15-0;
01地址bit31-16;
10地址bit47-32;
11地址bit63-48
0]sys_data_out;
//读SDRAM时数据暂存器,(格式同上)
outputsdram_busy;
//SDRAM忙标志,高表示SDRAM处于工作中
outputsys_dout_rdy;
//SDRAM数据输出完成标志
*/
0]rdf_dout;
//sdram数据读出缓存FIFO输出数据总线
//outputrdf_rdreq;
//sdram数据读出缓存FIFO数据输出请求,高有效
//SDRAM的封装接口
wiresdram_wr_req;
//系统写SDRAM请求信号
wiresdram_rd_req;
wiresdram_wr_ack;
//系统写SDRAM响应信号,作为wrFIFO的输出有效信号
wiresdram_rd_ack;
//系统读SDRAM响应信号,作为rdFIFO的输写有效信号
wire[21:
0]sys_addr;
//读写SDRAM时地址暂存器,(bit21-20)L-Bank地址:
(bit19-8)为行地址,(bit7-0)为列地址
wire[15:
//写SDRAM时数据暂存器
//sdram数据读出缓存FIFO输入数据总线
wiresdram_busy;
wiresys_dout_rdy;
//wrFIFO输入控制接口
0]wrf_din;
//sdram数据写入缓存FIFO输入数据总线
wirewrf_wrreq;
//sdram数据写入缓存FIFO数据输入请求,高有效
//rdFIFO输出控制接口
wirerdf_rdreq;
//系统控制相关信号接口
wireclk_25m;
//PLL输入25MHz时钟
wireclk_100m;
//PLL输出100MHz时钟
wiresys_rst_n;
//系统复位信号,低有效
//------------------------------------------------
//例化系统复位信号和PLL控制模块
sys_ctrluut_sysctrl(
.clk(clk),
.rst_n(rst_n),
.sys_rst_n(sys_rst_n),
.clk_25m(clk_25m),
.clk_100m(clk_100m),
.sdram_clk(sdram_clk)
);
//例化SDRAM封装控制模块
sdram_topuut_sdramtop(//SDRAM
.clk(clk_100m),
.rst_n(sys_rst_n),
.sdram_wr_req(sdram_wr_req),
.sdram_rd_req(sdram_rd_req),
.sdram_wr_ack(sdram_wr_ack),
.sdram_rd_ack(sdram_rd_ack),
.sys_addr(sys_addr),
.sys_data_in(sys_data_in),
.sys_data_out(sys_data_out),
.sys_dout_rdy(sys_dout_rdy),
//.sdram_clk(sdram_clk),
.sdram_busy(sdram_busy),
.sdram_cke(sdram_cke),
.sdram_cs_n(sdram_cs_n),
.sdram_ras_n(sdram_ras_n),
.sdram_cas_n(sdram_cas_n),
.sdram_we_n(sdram_we_n),
.sdram_ba(sdram_ba),
.sdram_addr(sdram_addr),
.sdram_data(sdram_data)
//.sdram_udqm(sdram_udqm),
//.sdram_ldqm(sdram_ldqm)
//读写SDRAM数据缓存FIFO模块例化
sdfifo_ctrluut_sdffifoctrl(
.clk_25m(clk_25m),
.clk_100m(clk_100m),
.wrf_din(wrf_din),
.wrf_wrreq(wrf_wrreq),
.sdram_wr_ack(sdram_wr_ack),
//.sys_addr(sys_addr),
.sys_data_in(sys_data_in),
.sdram_wr_req(sdram_wr_req),
.sys_data_out(sys_data_out),
.rdf_rdreq(rdf_rdreq),
.sdram_rd_ack(sdram_rd_ack),
.rdf_dout(rdf_dout),
.sdram_rd_req(sdram_rd_req),
.syswr_done(syswr_done),
.tx_start(tx_start)
);
//例化模拟写入数据到sdram模块
wiresyswr_done;
//所有数据写入sdram完成标志位
datageneuut_datagene(
.clk(clk_25m),
.rst_n(sys_rst_n),
.moni_addr(sys_addr),
.sdram_rd_ack(sdram_rd_ack)
//例化串口数据发送控制模块
wiretx_start;
//串口发送数据启动标志位,高有效
uart_ctrluut_uartctrl(
.clk(clk_25m),
.rst_n(sys_rst_n),
.tx_data(rdf_dout[7:
0]),
.tx_start(tx_start),///////////
.fifo232_rdreq(rdf_rdreq),
.rs232_tx(rs232_tx)
endmodule
/***************系统复位信号和PLL控制模块******************************/
moduleuart_ctrl(
tx_data,tx_start,
fifo232_rdreq,
rs232_tx
//25MHz主时钟
//低电平复位信号
input[7:
0]tx_data;
//待发送数据
inputtx_start;
outputfifo232_rdreq;
//FIFO读请求信号,高有效
//----------------------------------------------------------------
//串口发送底层模块和串口波特率选择模块接口
wireclk_bps;
//发送数据标志位,高有效
wirebps_start;
//波特率时钟计数器启动信号,高有效
//例化串口数据发送底层模块
uart_txuut_tx(
.clk(clk),
.rst_n(rst_n),
.tx_data(tx_data),
.tx_start(tx_start),
.clk_bps(clk_bps),
.rs232_tx(rs232_tx),
.bps_start(bps_start),
.fifo232_rdreq(fifo232_rdreq)
);
//例化串口数据发送波特率控制模块
uart_speed_selectuut_ss(
.clk(clk),
.rst_n(rst_n),
.bps_start(bps_start),
.clk_bps(clk_bps)
);
/*****************模拟写入数据到SDRAM的datagene模块*******************/
moduledatagene(
wrf_din,wrf_wrreq,
moni_addr,syswr_done,
sdram_rd_ack
//FPAG输入时钟信号25MHz
//FPGA输入复位信号
outputwrf_wrreq;
output[21:
0]moni_addr;
//sdram读写地址产生
outputsyswr_done;
inputsdram_rd_ack;
//系统读SDRAM响应信号,作为rdFIFO的输写有效信号,这里捕获它的下降沿作为读地址自增加标志位
regsdr_rdackr1,sdr_rdackr2;
//------------------------------------------
//捕获sdram_rd_ack下降沿标志位
always@(posedgeclkornegedgerst_n)
if(!
rst_n)begin
sdr_rdackr1<
=1'
b0;
sdr_rdackr2<
end
elsebegin
=sdram_rd_ack;
=sdr_rdackr1;
wireneg_rdack=~sdr_rdackr1&
sdr_rdackr2;
//上电500us延时等待sdram就绪
reg[13:
0]delay;
//500us延时计数器
always@(posedgeclkornegedgerst_n)
rst_n)delay<
=14'
d0;
elseif(delay<
14'
d12500)delay<
=delay+1'
b1;
wiredelay_done=(delay==14'
d12500);
//1ms延时结束
//每640ns写入8个16bit数据到sdram,
//上电后所有地址写入完毕时间需要不到360ms时间
reg[5:
0]cntwr;
//写sdram定时计数器
rst_n)cntwr<
=6'
elseif(delay_done)cntwr<
=cntwr+1'
//读写sdram地址产生
reg[18:
0]addr;
//sdram地址寄存器
rst_n)addr<
=19'
elseif(!
wr_done&
&
cntwr==6'
h3f)addr<
=addr+1'
//写地址产生
elseif(wr_done&
neg_rdack)addr<
//读地址产生////////////test
assignmoni_addr={addr,3'
b000};
regwr_done;
//所有数据写入sdram完成标志位
rst_n)wr_done<
elseif(addr==19'
h7ffff)wr_done<
assignsyswr_done=wr_done;
//写sdram请求信号产生,即wrfifo的写入有效信号
regwrf_wrreqr;
//wrfifo的写入有效信号
reg[15:
0]wrf_dinr;
//wrfifo的写入数据
if(!
rst_n)wrf_wrreqr<
elseif(!
wr_done)begin//上电0.5ms延时完成
if(cntwr==6'
h05)wrf_wrreqr<
//写请求信号产生
elseif(cntwr==6'
h0d)wrf_wrreqr<
//请求信号撤销
end
rst_n)wrf_dinr<
=16'
((cntwr>
6'
h05)&
(cntwr<
h0d)))begin//上电0.5ms延时完成
wrf_dinr<
=wrf_dinr+1'
//写入数据递增
end
assignwrf_wrreq=wrf_wrreqr;
assignwrf_din=wrf_dinr;
/********************sdfifo_ctrl控制模块*********************/
//fifo由quratusIPCORE生成,只写控制fifo模块即可
modulesdfifo_ctrl(
clk_25m,clk_100m,
sdram_wr_ack,/*sys_addr,*/sys_data_in,sdram_wr_req,
sys_data_out,rdf_rdreq,sdram_rd_ack,rdf_dout,sdram_rd_req,
syswr_done,tx_start
inputclk_25m;
//PLL输出25MHz时钟
inputclk_100m;
//wrfifo
input[15:
inputwrf_wrreq;
inputsdram_wr_ack;
//output[21:
//sdram数据写入缓存FIFO输出数据总线,即写SDRAM时数据暂存器
outputsdram_wr_req;
//系统写SDRAM请求信号
//rdfifo
inputrdf_rdreq;
//系统读SDRAM响应信号,作为rdFIFO的输写有效信号
//sdram数据读出缓存FIFO输出数据总线
outputsdram_rd_req;
//系统读SDRAM请求信号
inputsyswr_done;
outputtx_start;
wire[8:
0]wrf_use;
//sdram数据写入缓存FIFO已用存储空间数量
0]rdf_use;
//sdram数据读出缓存FIFO已用存储空间数量
//assignsys_addr=22'
h1a9e21;
//测试用
assignsdram_wr_req=((wrf_use>
=9'
d8)&
~syswr_done);
//FIFO(8个16bit数据)即发出写SDRAM请求信号
assignsdram_rd_req=((rdf_use<
d256)&
s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SDRAMverilog 串口 例程