ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:44.55KB ,
资源ID:11562032      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11562032.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(SDRAM verilog 串口例程.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

SDRAM verilog 串口例程.docx

1、SDRAM verilog 串口例程SDRAM工程顶层RTL视图:SDRAM控制器RTL视图:FIFO控制器RTL视图:/*SDRAM顶层模块*/module sdr_test( clk,rst_n, sdram_clk,sdram_cke,sdram_cs_n,sdram_ras_n,sdram_cas_n,sdram_we_n, sdram_ba,sdram_addr,sdram_data,/sdram_udqm,sdram_ldqm rs232_tx, /* sdram_rd_req,sdram_wr_ack,sdram_rd_ack, sys_data_out,sdram_busy,s

2、ys_data_in,sys_dout_rdy, */ rdf_dout/*,rdf_rdreq*/ );input clk; /系统时钟,100MHzinput rst_n; /复位信号,低电平有效 / FPGA与SDRAM硬件接口output sdram_clk; / SDRAM时钟信号output sdram_cke; / SDRAM时钟有效信号output sdram_cs_n; / SDRAM片选信号output sdram_ras_n; / SDRAM行地址选通脉冲output sdram_cas_n; / SDRAM列地址选通脉冲output sdram_we_n; / SDRA

3、M写允许位output1:0 sdram_ba; / SDRAM的L-Bank地址线output11:0 sdram_addr; / SDRAM地址总线/output sdram_udqm; / SDRAM高字节屏蔽/output sdram_ldqm; / SDRAM低字节屏蔽inout15:0 sdram_data; / SDRAM数据总线output rs232_tx; /RS232发送数据信号/ / SDRAM的封装接口测试引出/*output sdram_rd_req; /系统读SDRAM请求信号output sdram_wr_ack; /系统写SDRAM响应信号output sdr

4、am_rd_ack; /系统读SDRAM响应信号 output15:0 sys_data_in; /写SDRAM时数据暂存器,4个突发读写字数据,默认为00地址bit15-0;01地址bit31-16;10地址bit47-32;11地址bit63-48output15:0 sys_data_out; /读SDRAM时数据暂存器,(格式同上)output sdram_busy; / SDRAM忙标志,高表示SDRAM处于工作中output sys_dout_rdy; / SDRAM数据输出完成标志*/output15:0 rdf_dout; /sdram数据读出缓存FIFO输出数据总线 /out

5、put rdf_rdreq; /sdram数据读出缓存FIFO数据输出请求,高有效/ / SDRAM的封装接口wire sdram_wr_req; /系统写SDRAM请求信号wire sdram_rd_req; /系统读SDRAM请求信号wire sdram_wr_ack; /系统写SDRAM响应信号,作为wrFIFO的输出有效信号wire sdram_rd_ack; /系统读SDRAM响应信号,作为rdFIFO的输写有效信号 wire21:0 sys_addr; /读写SDRAM时地址暂存器,(bit21-20)L-Bank地址:(bit19-8)为行地址,(bit7-0)为列地址 wire

6、15:0 sys_data_in; /写SDRAM时数据暂存器wire15:0 sys_data_out; /sdram数据读出缓存FIFO输入数据总线wire sdram_busy; / SDRAM忙标志,高表示SDRAM处于工作中wire sys_dout_rdy; / SDRAM数据输出完成标志 /wrFIFO输入控制接口wire15:0 wrf_din; /sdram数据写入缓存FIFO输入数据总线wire wrf_wrreq; /sdram数据写入缓存FIFO数据输入请求,高有效 /rdFIFO输出控制接口wire15:0 rdf_dout; /sdram数据读出缓存FIFO输出数据

7、总线 wire rdf_rdreq; /sdram数据读出缓存FIFO数据输出请求,高有效 /系统控制相关信号接口wire clk_25m; /PLL输出25MHz时钟wire clk_100m; /PLL输出100MHz时钟wire sys_rst_n; /系统复位信号,低有效/-/例化系统复位信号和PLL控制模块sys_ctrl uut_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) );/-/例化S

8、DRAM封装控制模块sdram_top uut_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), /

9、.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) );

10、 /-/读写SDRAM数据缓存FIFO模块例化 sdfifo_ctrl uut_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

11、_rd_ack(sdram_rd_ack), .rdf_dout(rdf_dout), .sdram_rd_req(sdram_rd_req), .syswr_done(syswr_done), .tx_start(tx_start) ); /-/例化模拟写入数据到sdram模块wire syswr_done; /所有数据写入sdram完成标志位datagene uut_datagene( .clk(clk_25m), .rst_n(sys_rst_n), .wrf_din(wrf_din), .wrf_wrreq(wrf_wrreq), .moni_addr(sys_addr), .sysw

12、r_done(syswr_done), .sdram_rd_ack(sdram_rd_ack) );/-/例化串口数据发送控制模块wire tx_start; /串口发送数据启动标志位,高有效uart_ctrl uut_uartctrl( .clk(clk_25m), .rst_n(sys_rst_n), .tx_data(rdf_dout7:0), .tx_start(tx_start), / .fifo232_rdreq(rdf_rdreq), .rs232_tx(rs232_tx) );endmodule/*系统复位信号和PLL控制模块*/module uart_ctrl( clk,rs

13、t_n, tx_data,tx_start, fifo232_rdreq, rs232_tx );input clk; / 25MHz主时钟input rst_n; /低电平复位信号input7:0 tx_data; /待发送数据input tx_start; /串口发送数据启动标志位,高有效output fifo232_rdreq; /FIFO读请求信号,高有效output rs232_tx; /RS232发送数据信号/- /串口发送底层模块和串口波特率选择模块接口wire clk_bps; /发送数据标志位,高有效wire bps_start; /波特率时钟计数器启动信号,高有效/-/例化

14、串口数据发送底层模块uart_tx uut_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_select uut_ss( .clk(clk), .rst_n(rst_n), .bps_start(bps_start), .clk_bps(clk_bps) );en

15、dmodule/*模拟写入数据到SDRAM的datagene模块*/module datagene( clk,rst_n, wrf_din,wrf_wrreq, moni_addr,syswr_done, sdram_rd_ack );input clk; /FPAG输入时钟信号25MHzinput rst_n; /FPGA输入复位信号 /wrFIFO输入控制接口output15:0 wrf_din; /sdram数据写入缓存FIFO输入数据总线output wrf_wrreq; /sdram数据写入缓存FIFO数据输入请求,高有效output21:0 moni_addr; /sdram读写地

16、址产生output syswr_done; /所有数据写入sdram完成标志位input sdram_rd_ack; /系统读SDRAM响应信号,作为rdFIFO的输写有效信号,这里捕获它的下降沿作为读地址自增加标志位reg sdr_rdackr1,sdr_rdackr2;/-/捕获sdram_rd_ack下降沿标志位always (posedge clk or negedge rst_n) if(!rst_n) begin sdr_rdackr1 = 1b0; sdr_rdackr2 = 1b0; end else begin sdr_rdackr1 = sdram_rd_ack; sdr_

17、rdackr2 = sdr_rdackr1; endwire neg_rdack = sdr_rdackr1 & sdr_rdackr2;/-/上电500us延时等待sdram就绪reg13:0 delay; /500us延时计数器always (posedge clk or negedge rst_n) if(!rst_n) delay = 14d0; else if(delay 14d12500) delay = delay+1b1;wire delay_done = (delay = 14d12500); /1ms延时结束/每640ns写入8个16bit数据到sdram,/上电后所有地址

18、写入完毕时间需要不到360ms时间reg5:0 cntwr; /写sdram定时计数器always (posedge clk or negedge rst_n) if(!rst_n) cntwr = 6d0; else if(delay_done) cntwr = cntwr+1b1;/-/读写sdram地址产生reg18:0 addr; /sdram地址寄存器always (posedge clk or negedge rst_n) if(!rst_n) addr = 19d0; else if(!wr_done & cntwr = 6h3f) addr = addr+1b1;/写地址产生

19、else if(wr_done & neg_rdack) addr = addr+1b1; /读地址产生 /testassign moni_addr = addr,3b000;reg wr_done; /所有数据写入sdram完成标志位always (posedge clk or negedge rst_n) if(!rst_n) wr_done = 1b0; else if(addr = 19h7ffff) wr_done = 1b1;assign syswr_done = wr_done;/-/写sdram请求信号产生,即wrfifo的写入有效信号reg wrf_wrreqr; /wrfi

20、fo的写入有效信号reg15:0 wrf_dinr; /wrfifo的写入数据always (posedge clk or negedge rst_n) if(!rst_n) wrf_wrreqr = 1b0; else if(!wr_done) begin /上电0.5ms延时完成 if(cntwr = 6h05) wrf_wrreqr = 1b1; /写请求信号产生 else if(cntwr = 6h0d) wrf_wrreqr = 1b0; /请求信号撤销 endalways (posedge clk or negedge rst_n) if(!rst_n) wrf_dinr 6h05

21、) & (cntwr = 6h0d) begin /上电0.5ms延时完成 wrf_dinr = 9d8) & syswr_done); /FIFO(8个16bit数据)即发出写SDRAM请求信号assign sdram_rd_req = (rdf_use = 9d256) & syswr_done); /sdram写入完成且FIFO半空(256个16bit数据)即发出读SDRAM请求信号assign tx_start = (rdf_use != 9d0) & syswr_done); /启动串口发送数据/-/例化SDRAM写入数据缓存FIFO模块wrfifo uut_wrfifo( .data(wrf_din), .rdclk(clk_100m), .rdreq(sdram_wr_ack), .wrclk(clk_25m), .wrreq(wrf_wrreq), .q(sys_data_in), .wrusedw(w

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1