当前位置: 首页 > news >正文

直播网站怎样建设甘肃省网站备案

直播网站怎样建设,甘肃省网站备案,做网站需要工商执照吗,wordpress 中文乱码由于直接对 DDR3 进行控制很复杂#xff0c;因此一般使用 MIG IP 来实现#xff0c;同时为了更简单地使用 MIG IP#xff0c;我们采用 AXI4 总线协议进行控制。下面首先介绍 MIG IP 的配置#xff0c;然后看看官方 demo #xff08;里面包含一个仿真要用到的 DDR3 模型因此一般使用 MIG IP 来实现同时为了更简单地使用 MIG IP我们采用 AXI4 总线协议进行控制。下面首先介绍 MIG IP 的配置然后看看官方 demo 里面包含一个仿真要用到的 DDR3 模型及其仿真结果最后进行我们自己的控制代码实现。 MIG IP 生成 在 IP Catalog 里搜索 MIG如下 第一步里勾选 AXI4 Interface 选项使用 AXI4 接口 下一步是选择 FPGA 型号读者自行选择自己的 FPGA 型号下一步是选择控制器类型我们直接选择 DDR3 SDRAM这几步很简单就不放图了。再下一步Controller Options这里要重点介绍下 首先配置 DDR3 的工作时钟这个时钟也就是 DDR3_CLK_P/N下一个 PHY to Controller Clock Ratio 是 FPGA 与 MIG 间通信使用的时钟ui_clk与 DDR3 时钟的比值笔者使用 200MHz因此这里设置为 2:1Memory Type 需读者按照自己的 DDR 型号进行选择Data Width 是 DDR3 用到的数据位宽比如笔者用到 4 片 DDR每片位宽 16bit菊花链连接因此这里需要设为 64。 下一步这里的 Data Width 是 FPGA 与 MIG 通信用到的数据位宽为方便起见我使用了与 DDR 数据同位宽下一个是设置读写优先级的TDM 是读写同级也可修改为读/写优先、循环读写等。 下一步Input Clock Period 是设置 sys_clk_i 的频率MIG IP 会使用这个时钟生成 DDR3_CK 信号以及供用户使用的 ui_clk所有关于 MIG 的用户操作均应在 ui_clk 下进行最下面的 Memory Address Mapping Selection 是 MIG 与 DDR 进行读写通信时的地址写入顺序。 下一步System Clock 设为 No Buffer因为我们用到的 sys_clk_i 是从 FPGA 内部提供的如果是从外部引脚提供则需要修改这里有单引脚时钟也有差分时钟信号参考时钟直接使用 sys_clk_iSystem Reset Polarity 设置 sys_rst 的极性这里我设为低电平有效。 下一步是设置引脚阻抗再下一步勾选 Fixed Pin Out再下一步这里配置 DDR3 的引脚可以手动配置也可以 read XDC 来配置然后 Validate 一下如果通过了就可以下一步了不 validate 那个 next 无法点击。 下一步由于这三个信号我均做为 FPGA 内部信号因此都 No connect 再之后就是 summary 啥的一路 next 到底就行。 注意事项 在使用 MIG IP 时mmcm_locked 信号指示是否稳定给出 ui_clk为高表示给出了稳定的 ui_clkinit_calib_complete 信号表示会否完成 DDR3 的初始化为高表示完成初始化在这之后才可以进行 DDR3 的读写。 注意 MIG IP 的 app_sr_req、app_ref_req、app_zq_req 要置零否则无法完成 DDR 初始化init_calib_complete 将无法拉高。 此外MIG IP 有三个 reset 信号分别是 sys_rst、ui_clk_sync_rst 和 aresetn 。ui_clk_sync_rst 是同步于 ui_clk 的 sys_rst高电平有效但 MIG 并不会因为 sys_rst 而 reset而是通过 aresetn 进行 reset 的且 aresetn 应当同步于 ui_clk。因此应当如下书写三者的关系 always (posedge ui_clk) beginaresetn ~ui_clk_sync_rst; end官方 demo 在生成的 MIG IP 上右击Open IP Example Design会新建一个名为 mig_7series_0_ex.xpr 的工程打开工程可以看到一个顶层文件 example_top.v 和一个仿真文件 sim_tb_top.v 可以直接运行仿真结果如下 在工程文件夹下 ./imports 文件夹中有两个文件ddr3_model.sv 和 ddr3_model_parameters.vh前者是 ddr3 的模型引用了后边这个 parameter 文件parameter 文件里是关于 ddr3 模型的参数配置在 ddr3_model 中修改 define 值可以配置 ddr3_model 的各类参数。后面仿真我们自己写的控制代码就要用到这个 DDR3 模型文件。 自己的FPGA实现 MIG IP 用到 AXI 总线协议因此建议读者首先对该总线协议进行初步了解具体可见我之前的文章。这里也推荐一个知乎大佬写的 AXI 协议介绍链接在此。 其余不多说代码如下该模块自动完成从 W_FIFO 向 DDR 的写入以及从 DDR 读数据到 R_FIFO用户只需要读写两个 FIFO 即可 /* * file : DDR3_top.v* author : 今朝无言* Lab : WHU-EIS-LMSWE* date : 2023-04-21* version : v1.0* description : DDR3控制模块*/ module DDR3_top( input clk_200M, input rst_n, output rst_busy,//--------------------ddr3------------------------ inout [63:0] ddr3_dq, //DQ4片 x16 DDR的数据线output [14:0] ddr3_addr, //Address output [2:0] ddr3_ba, //Bank Addressinout [7:0] ddr3_dqs_p, //DQ Select0,2,4,6分别为四片DDR的DQSL(Lower Byte) inout [7:0] ddr3_dqs_n, //1,3,5,7分别为四片DDR的DQSU(Upper Byte) //Output with read data. Edge-aligned with read data. //Input with write data. Center-aligned to write data.output [0:0] ddr3_ck_p, //4片DR3共用ck、cke、odt、cs信号故[0:0] output [0:0] ddr3_ck_n, //differential clock inputs. All control and address input signals are sampled //on the crossing of the positive edge of CK and the negative edge of CK#output [7:0] ddr3_dm, //Input Data Mask0,2,4,6为DML1,3,5,7为DMU output [0:0] ddr3_cke, //Clock Enable output [0:0] ddr3_cs_n, //Chip Select output ddr3_ras_n, //Row Address Enable output ddr3_cas_n, //Column Address Enable output ddr3_we_n, //Write Enable output [0:0] ddr3_odt, //On-die termination enable output ddr3_reset_n,//-------------FPGA FIFO Control------------------- input wr_en, //高电平有效 input [63:0] wrdat, output full, //fifo_w fullinput rd_en, //高电平有效 output [63:0] rddat, output empty //fifo_r empty ); //本方案采用4片 MT41K256M16TW-107 芯片每片 256M * 16bit 512MB 容量 //8个Bank故 BA 为 3 位行地址用到全部的 15 根地址线列地址用到 log2(256M/2^15/2^3)10 根地址线parameter AXI_ID 4h00; //读写事务ID parameter DATA_NUM 32; //一次突发传输的数据个数1~256localparam AXI_LEN DATA_NUM - 1b1; localparam FIFO_LEN 1024; //w_fifo、r_fifo的长度//----------------------------------state define----------------------------------------- localparam S_IDLE 8h01; //等待初始化 localparam S_ARB 8h02; //判决接下来进行WR还是RD localparam S_WR_ADDR 8h04; //写地址 localparam S_WR_DATA 8h08; //写数据 localparam S_WR_RESP 8h10; //写回复 localparam S_RD_ADDR 8h20; //读地址 localparam S_RD_DATA 8h40; //读数据 localparam S_RD_RESP 8h80; //读回复//--------------------------------------------------------------------------------------- reg [7:0] state S_IDLE; reg [7:0] next_state S_IDLE; //尽管 AXI 的读、写可以独立然而 DDR 读写是分时复用因此这里的读写也必须分时进行//FIFO wire w_fifo_full; wire w_fifo_empty; wire r_fifo_full; wire r_fifo_empty;reg w_fifo_rden 1b0; reg r_fifo_wren 1b0;wire fifo_rst;wire [9:0] w_fifo_rddat_cnt; wire [9:0] r_fifo_wrdat_cnt;wire w_fifo_wr_rst_busy; wire w_fifo_rd_rst_busy; wire r_fifo_wr_rst_busy; wire r_fifo_rd_rst_busy;wire w_fifo_rst_busy; wire r_fifo_rst_busy;//Application interface ports wire ui_clk; //MIG输出的时钟一切关于mig的操作均应在此时钟域下进行 wire ui_clk_sync_rst; //mig输出的rst信号同步于ui_clk高电平有效 wire mmcm_locked; reg aresetn; wire init_calib_complete; //指示MIG是否完成初始化wire app_sr_req; wire app_ref_req; wire app_zq_req; wire app_sr_active; wire app_ref_ack; wire app_zq_ack;//Slave Interface Write Address Ports wire [3:0] s_axi_awid; reg [30:0] s_axi_awaddr; //4*512MB2GB对应 2^31 Byte故 AXI 地址线位宽为 31 wire [7:0] s_axi_awlen; wire [2:0] s_axi_awsize; wire [1:0] s_axi_awburst; wire [0:0] s_axi_awlock; wire [3:0] s_axi_awcache; wire [2:0] s_axi_awprot; wire [3:0] s_axi_awqos; reg s_axi_awvalid; wire s_axi_awready;//Slave Interface Write Data Ports wire [63:0] s_axi_wdata; wire [7:0] s_axi_wstrb; reg s_axi_wlast; reg s_axi_wvalid; wire s_axi_wready;//Slave Interface Write Response Ports wire [3:0] s_axi_bid; wire [1:0] s_axi_bresp; wire s_axi_bvalid; reg s_axi_bready;//Slave Interface Read Address Ports wire [3:0] s_axi_arid; reg [30:0] s_axi_araddr; wire [7:0] s_axi_arlen; wire [2:0] s_axi_arsize; wire [1:0] s_axi_arburst; wire [0:0] s_axi_arlock; wire [3:0] s_axi_arcache; wire [2:0] s_axi_arprot; wire [3:0] s_axi_arqos; reg s_axi_arvalid; wire s_axi_arready;//Slave Interface Read Data Ports wire [3:0] s_axi_rid; wire [63:0] s_axi_rdata; wire [1:0] s_axi_rresp; wire s_axi_rlast; wire s_axi_rvalid; reg s_axi_rready;//ddr3读写请求 reg wr_ddr3_req; reg rd_ddr3_req;//突发读写的已传输数据计数 reg [8:0] data_cnt;//------------------------------------write FIFO------------------------------------------ //异步FIFO 采用 First Word Fall Through 模式 1024*64 fifo_generator_DDR_W fifo_w(.rst (fifo_rst),.wr_clk (clk_200M),.rd_clk (ui_clk),.din (wrdat),.wr_en (wr_en),.rd_en (w_fifo_rden),.dout (s_axi_wdata),.full (w_fifo_full),.empty (w_fifo_empty),.rd_data_count (w_fifo_rddat_cnt), //仿真显示w_fifo_rddat_cnt 和 r_fifo_wrdat_cnt 计数不可信...IP 在做什么!!!.wr_data_count (),.wr_rst_busy (w_fifo_wr_rst_busy),.rd_rst_busy (w_fifo_rd_rst_busy) );//------------------------------------read FIFO------------------------------------------- //异步FIFO fifo_generator_DDR_R fifo_r(.rst (fifo_rst),.wr_clk (ui_clk),.rd_clk (clk_200M),.din (s_axi_rdata),.wr_en (r_fifo_wren),.rd_en (rd_en),.dout (rddat),.full (r_fifo_full),.empty (r_fifo_empty),.rd_data_count (),.wr_data_count (r_fifo_wrdat_cnt),.wr_rst_busy (r_fifo_wr_rst_busy),.rd_rst_busy (r_fifo_rd_rst_busy) );//----------------------------------MIG IP, AXI4----------------------------------------- mig_7series_0 u_mig_7series_0 (// Memory interface ports.ddr3_addr (ddr3_addr), // output [14:0] ddr3_addr.ddr3_ba (ddr3_ba), // output [2:0] ddr3_ba.ddr3_cas_n (ddr3_cas_n), // output ddr3_cas_n.ddr3_ck_n (ddr3_ck_n), // output [0:0] ddr3_ck_n.ddr3_ck_p (ddr3_ck_p), // output [0:0] ddr3_ck_p.ddr3_cke (ddr3_cke), // output [0:0] ddr3_cke.ddr3_ras_n (ddr3_ras_n), // output ddr3_ras_n.ddr3_reset_n (ddr3_reset_n), // output ddr3_reset_n.ddr3_we_n (ddr3_we_n), // output ddr3_we_n.ddr3_dq (ddr3_dq), // inout [63:0] ddr3_dq.ddr3_dqs_n (ddr3_dqs_n), // inout [7:0] ddr3_dqs_n.ddr3_dqs_p (ddr3_dqs_p), // inout [7:0] ddr3_dqs_p.ddr3_cs_n (ddr3_cs_n), // output [0:0] ddr3_cs_n.ddr3_dm (ddr3_dm), // output [7:0] ddr3_dm.ddr3_odt (ddr3_odt), // output [0:0] ddr3_odt// Application interface ports.ui_clk (ui_clk), // output ui_clk.ui_clk_sync_rst (ui_clk_sync_rst), // output ui_clk_sync_rst.mmcm_locked (mmcm_locked), // output mmcm_locked.aresetn (aresetn), // input aresetn.init_calib_complete (init_calib_complete), // output init_calib_complete.app_sr_req (app_sr_req), // input app_sr_req.app_ref_req (app_ref_req), // input app_ref_req.app_zq_req (app_zq_req), // input app_zq_req.app_sr_active (app_sr_active), // output app_sr_active.app_ref_ack (app_ref_ack), // output app_ref_ack.app_zq_ack (app_zq_ack), // output app_zq_ack// Slave Interface Write Address Ports.s_axi_awid (s_axi_awid), // input [3:0] s_axi_awid.s_axi_awaddr (s_axi_awaddr), // input [30:0] s_axi_awaddr.s_axi_awlen (s_axi_awlen), // input [7:0] s_axi_awlen.s_axi_awsize (s_axi_awsize), // input [2:0] s_axi_awsize.s_axi_awburst (s_axi_awburst), // input [1:0] s_axi_awburst.s_axi_awlock (s_axi_awlock), // input [0:0] s_axi_awlock.s_axi_awcache (s_axi_awcache), // input [3:0] s_axi_awcache.s_axi_awprot (s_axi_awprot), // input [2:0] s_axi_awprot.s_axi_awqos (s_axi_awqos), // input [3:0] s_axi_awqos.s_axi_awvalid (s_axi_awvalid), // input s_axi_awvalid.s_axi_awready (s_axi_awready), // output s_axi_awready// Slave Interface Write Data Ports.s_axi_wdata (s_axi_wdata), // input [63:0] s_axi_wdata.s_axi_wstrb (s_axi_wstrb), // input [7:0] s_axi_wstrb.s_axi_wlast (s_axi_wlast), // input s_axi_wlast.s_axi_wvalid (s_axi_wvalid), // input s_axi_wvalid.s_axi_wready (s_axi_wready), // output s_axi_wready// Slave Interface Write Response Ports.s_axi_bid (s_axi_bid), // output [3:0] s_axi_bid.s_axi_bresp (s_axi_bresp), // output [1:0] s_axi_bresp.s_axi_bvalid (s_axi_bvalid), // output s_axi_bvalid.s_axi_bready (s_axi_bready), // input s_axi_bready// Slave Interface Read Address Ports.s_axi_arid (s_axi_arid), // input [3:0] s_axi_arid.s_axi_araddr (s_axi_araddr), // input [30:0] s_axi_araddr.s_axi_arlen (s_axi_arlen), // input [7:0] s_axi_arlen.s_axi_arsize (s_axi_arsize), // input [2:0] s_axi_arsize.s_axi_arburst (s_axi_arburst), // input [1:0] s_axi_arburst.s_axi_arlock (s_axi_arlock), // input [0:0] s_axi_arlock.s_axi_arcache (s_axi_arcache), // input [3:0] s_axi_arcache.s_axi_arprot (s_axi_arprot), // input [2:0] s_axi_arprot.s_axi_arqos (s_axi_arqos), // input [3:0] s_axi_arqos.s_axi_arvalid (s_axi_arvalid), // input s_axi_arvalid.s_axi_arready (s_axi_arready), // output s_axi_arready// Slave Interface Read Data Ports.s_axi_rid (s_axi_rid), // output [3:0] s_axi_rid.s_axi_rdata (s_axi_rdata), // output [63:0] s_axi_rdata.s_axi_rresp (s_axi_rresp), // output [1:0] s_axi_rresp.s_axi_rlast (s_axi_rlast), // output s_axi_rlast.s_axi_rvalid (s_axi_rvalid), // output s_axi_rvalid.s_axi_rready (s_axi_rready), // input s_axi_rready// System Clock Ports.sys_clk_i (clk_200M), // input sys_clk_i 200M.sys_rst (rst_n) // input sys_rst );//---------------------------------------FSM---------------------------------------------- always (posedge ui_clk or posedge ui_clk_sync_rst) beginif(ui_clk_sync_rst) beginstate S_IDLE;endelse beginstate next_state;end endalways (*) begincase(state)S_IDLE: beginif(mmcm_locked init_calib_complete) beginnext_state S_ARB;endelse beginnext_state S_IDLE;endendS_ARB: beginif(wr_ddr3_req) beginnext_state S_WR_ADDR;endelse if(rd_ddr3_req (s_axi_araddr ! s_axi_awaddr)) begin //DDR3不空才可读取next_state S_RD_ADDR;endelse beginnext_state S_ARB;endendS_WR_ADDR: beginif(s_axi_awvalid s_axi_awready) beginnext_state S_WR_DATA;endelse beginnext_state S_WR_ADDR;endendS_WR_DATA: beginif(data_cnt DATA_NUM) beginnext_state S_WR_RESP;endelse beginnext_state S_WR_DATA;endendS_WR_RESP: beginif(s_axi_bvalid s_axi_bready) beginnext_state S_ARB;endelse beginnext_state S_WR_RESP;endendS_RD_ADDR: beginif(s_axi_arvalid s_axi_arready) beginnext_state S_RD_DATA;endelse beginnext_state S_RD_ADDR;endendS_RD_DATA: beginif(data_cnt DATA_NUM) begin //m_axi_rready m_axi_rvalid m_axi_rlastnext_state S_RD_RESP;endelse beginnext_state S_RD_DATA;endendS_RD_RESP: beginnext_state S_ARB;enddefault: beginnext_state S_IDLE;endendcase end//-------------------------------------Control-------------------------------------------- assign s_axi_awid AXI_ID; assign s_axi_arid AXI_ID;assign s_axi_awlen AXI_LEN; assign s_axi_arlen AXI_LEN;assign s_axi_awsize 3d3; //每个数据的大小为2^awsize 2^3 8Bytes 64bit assign s_axi_awburst 2b01; //突发传输模式为INCR地址一直增加递增的值为(2^Burst_size) assign s_axi_awlock 1b0; //正常传输非独占传输 assign s_axi_awcache 4b0000; //指明了总线中的存储类型 assign s_axi_awprot 3b000; //指明访问是否被允许的信号 assign s_axi_awqos 4b0000; assign s_axi_wstrb 8hff; //写字节通道选通assign s_axi_arsize 3d3; assign s_axi_arburst 2b01; //突发传输模式为INCR assign s_axi_arlock 1b0; assign s_axi_arcache 4b0000; assign s_axi_arprot 3b000; assign s_axi_arqos 4b0000;assign full w_fifo_full; assign empty r_fifo_empty;always (posedge ui_clk) beginaresetn ~ui_clk_sync_rst; endassign fifo_rst ~mmcm_locked; //fifo的rst必须同时存在rd_clk和wr_clk否则将初始化失败一直处在rst_busy阶段assign app_sr_req 1b0; //此三者要置零否则 refresh DDR assign app_ref_req 1b0; assign app_zq_req 1b0;assign w_fifo_rst_busy w_fifo_wr_rst_busy | w_fifo_rd_rst_busy; assign r_fifo_rst_busy r_fifo_wr_rst_busy | r_fifo_rd_rst_busy;assign rst_busy w_fifo_rst_busy | r_fifo_rst_busy | (~init_calib_complete);//-----------s_axi_awvalid-------------- always (*) begincase(state)S_WR_ADDR: begins_axi_awvalid 1b1;enddefault: begins_axi_awvalid 1b0;endendcase end//-----------s_axi_wvalid--------------- always (*) begincase(state)S_WR_DATA: beginif(~w_fifo_empty data_cnt DATA_NUM) begins_axi_wvalid 1b1;endelse begins_axi_wvalid 1b0;endenddefault: begins_axi_wvalid 1b0;endendcase end//-----------s_axi_wlast--------------- always (*) begincase(state)S_WR_DATA: beginif(data_cnt DATA_NUM - 1) begins_axi_wlast 1b1;endelse begins_axi_wlast 1b0;endenddefault: begins_axi_wlast 1b0;endendcase end//-----------s_axi_bready--------------- always (*) begincase(state)S_WR_RESP: begins_axi_bready 1b1;enddefault: begins_axi_bready 1b0;endendcase end//-----------s_axi_arvalid-------------- always (*) begincase(state)S_RD_ADDR: begins_axi_arvalid 1b1;enddefault: begins_axi_arvalid 1b0;endendcase end//-----------s_axi_rready--------------- always (*) begincase(state)S_RD_DATA: beginif(~r_fifo_full data_cnt DATA_NUM) begins_axi_rready 1b1;endelse begins_axi_rready 1b0;endendS_RD_RESP: begins_axi_rready 1b1;enddefault: begins_axi_rready 1b0;endendcase end//------------w_fifo_rden--------------- always (*) begincase(state)S_WR_DATA: beginw_fifo_rden s_axi_wvalid s_axi_wready;enddefault: beginw_fifo_rden 1b0;endendcase end//------------r_fifo_wren--------------- always (*) begincase(state)S_RD_DATA: beginr_fifo_wren s_axi_rready s_axi_rvalid;enddefault: beginr_fifo_wren 1b0;endendcase end//-------------data_cnt----------------- always (posedge ui_clk) begincase(state)S_IDLE, S_ARB: begindata_cnt 9d0;endS_WR_DATA: beginif(s_axi_wvalid s_axi_wready) begindata_cnt data_cnt 1b1;endelse begindata_cnt data_cnt;endendS_RD_DATA: beginif(s_axi_rvalid s_axi_rready) begindata_cnt data_cnt 1b1;endelse begindata_cnt data_cnt;endenddefault: begindata_cnt data_cnt;endendcase end//------------s_axi_awaddr-------------- always (posedge ui_clk) begincase(state)S_IDLE: begins_axi_awaddr 31d0;endS_WR_RESP: beginif(s_axi_bvalid s_axi_bready) begins_axi_awaddr s_axi_awaddr DATA_NUM * 8; //s_axi_awaddr为字节地址每次写NUM个64bit数据end //超出最大范围后自动回到0else begins_axi_awaddr s_axi_awaddr;endenddefault: begins_axi_awaddr s_axi_awaddr;endendcase end//------------s_axi_araddr-------------- always (posedge ui_clk) begincase(state)S_IDLE: begins_axi_araddr 31d0;endS_RD_RESP: beginif(s_axi_rvalid s_axi_rready) begins_axi_araddr s_axi_araddr DATA_NUM * 8;endelse begins_axi_awaddr s_axi_awaddr;endenddefault: begins_axi_araddr s_axi_araddr;endendcase end//------------wr_ddr3_req--------------- always (posedge ui_clk) begincase(state)S_ARB: beginif(w_fifo_rddat_cnt DATA_NUM) beginwr_ddr3_req 1b1; //w_FIFO中数据足够一次突发传输发起写请求endelse beginwr_ddr3_req 1b0;endenddefault: beginwr_ddr3_req 1b0;endendcase end//------------rd_ddr3_req--------------- always (posedge ui_clk) begincase(state)S_ARB: beginif((FIFO_LEN - r_fifo_wrdat_cnt) DATA_NUM) beginrd_ddr3_req 1b1; //r_FIFO中空闲位置足够一次突发传输发起读请求endelse beginrd_ddr3_req 1b0;endenddefault: beginrd_ddr3_req 1b0;endendcase endendmoduletestbench 如下 timescale 100ps/100psmodule DDR3_tb();reg clk_200M 1b1; always #25 beginclk_200M ~clk_200M; endreg rst_n; wire rst_busy;//--------------------ddr3------------------------ wire [63:0] ddr3_dq; //DQ4片 x16 DDR的数据线wire [14:0] ddr3_addr; //Address wire [2:0] ddr3_ba; //Bank Addresswire [7:0] ddr3_dqs_p; //DQ Select0,2,4,6分别为四片DDR的DQSL(Lower Byte) wire [7:0] ddr3_dqs_n; //1,3,5,7分别为四片DDR的DQSU(Upper Byte) //Output with read data. Edge-aligned with read data. //Input with write data. Center-aligned to write data.wire [0:0] ddr3_ck_p; //4片DR3共用ck、cke、odt、cs信号故[0:0] wire [0:0] ddr3_ck_n; //differential clock inputs. All control and address input signals are sampled //on the crossing of the positive edge of CK and the negative edge of CK#wire [7:0] ddr3_dm; //Input Data Mask0,2,4,6为DML1,3,5,7为DMU wire [0:0] ddr3_cke; //Clock Enable wire [0:0] ddr3_cs_n; //Chip Select wire ddr3_ras_n; //Row Address Enable wire ddr3_cas_n; //Column Address Enable wire ddr3_we_n; //Write Enable wire [0:0] ddr3_odt; //On-die termination enable wire ddr3_reset_n;//-------------FPGA FIFO Control------------------- reg wr_en; //高电平有效 reg [63:0] wrdat 64d0; wire full; //fifo_w fullreg rd_en; //高电平有效 wire [63:0] rddat; wire empty; //fifo_r empty//--------------------DDR3 Control----------------------------------- DDR3_top DDR3_top_inst(.clk_200M (clk_200M),.rst_n (rst_n),.rst_busy (rst_busy),//--------------------ddr3------------------------.ddr3_dq (ddr3_dq),.ddr3_addr (ddr3_addr),.ddr3_ba (ddr3_ba),.ddr3_dqs_p (ddr3_dqs_p),.ddr3_dqs_n (ddr3_dqs_n),.ddr3_ck_p (ddr3_ck_p),.ddr3_ck_n (ddr3_ck_n),.ddr3_dm (ddr3_dm),.ddr3_cke (ddr3_cke),.ddr3_cs_n (ddr3_cs_n),.ddr3_ras_n (ddr3_ras_n),.ddr3_cas_n (ddr3_cas_n),.ddr3_we_n (ddr3_we_n),.ddr3_odt (ddr3_odt),.ddr3_reset_n (ddr3_reset_n),//-------------FPGA FIFO Control-------------------.wr_en (wr_en),.wrdat (wrdat),.full (full),.rd_en (rd_en),.rddat (rddat),.empty (empty) );//--------------------DDR3 Model----------------------------------- ddr3_model ddr3_b1 (.rst_n (ddr3_reset_n),.ck (ddr3_ck_p),.ck_n (ddr3_ck_n),.cke (ddr3_cke),.cs_n (ddr3_cs_n),.ras_n (ddr3_ras_n),.cas_n (ddr3_cas_n),.we_n (ddr3_we_n),.dm_tdqs (ddr3_dm[1:0]),.ba (ddr3_ba),.addr (ddr3_addr),.dq (ddr3_dq[15:0]),.dqs (ddr3_dqs_p[1:0]),.dqs_n (ddr3_dqs_n[1:0]),.tdqs_n (),.odt (ddr3_odt) );ddr3_model ddr3_b2 (.rst_n (ddr3_reset_n),.ck (ddr3_ck_p),.ck_n (ddr3_ck_n),.cke (ddr3_cke),.cs_n (ddr3_cs_n),.ras_n (ddr3_ras_n),.cas_n (ddr3_cas_n),.we_n (ddr3_we_n),.dm_tdqs (ddr3_dm[3:2]),.ba (ddr3_ba),.addr (ddr3_addr),.dq (ddr3_dq[31:16]),.dqs (ddr3_dqs_p[3:2]),.dqs_n (ddr3_dqs_n[3:2]),.tdqs_n (),.odt (ddr3_odt) );ddr3_model ddr3_b3 (.rst_n (ddr3_reset_n),.ck (ddr3_ck_p),.ck_n (ddr3_ck_n),.cke (ddr3_cke),.cs_n (ddr3_cs_n),.ras_n (ddr3_ras_n),.cas_n (ddr3_cas_n),.we_n (ddr3_we_n),.dm_tdqs (ddr3_dm[5:4]),.ba (ddr3_ba),.addr (ddr3_addr),.dq (ddr3_dq[47:32]),.dqs (ddr3_dqs_p[5:4]),.dqs_n (ddr3_dqs_n[5:4]),.tdqs_n (),.odt (ddr3_odt) );ddr3_model ddr3_b4 (.rst_n (ddr3_reset_n),.ck (ddr3_ck_p),.ck_n (ddr3_ck_n),.cke (ddr3_cke),.cs_n (ddr3_cs_n),.ras_n (ddr3_ras_n),.cas_n (ddr3_cas_n),.we_n (ddr3_we_n),.dm_tdqs (ddr3_dm[7:6]),.ba (ddr3_ba),.addr (ddr3_addr),.dq (ddr3_dq[63:48]),.dqs (ddr3_dqs_p[7:6]),.dqs_n (ddr3_dqs_n[7:6]),.tdqs_n (),.odt (ddr3_odt) );//--------------------wrdat, rddat----------------------------------- always (posedge clk_200M) beginif(wr_en) beginwrdat wrdat 1b1;endelse beginwrdat wrdat;end end//-----------------------tb---------------------------------------- initial beginwr_en 1b0;rd_en 1b0;rst_n 1b1;#100;rst_n 1b0;#100;rst_n 1b1;wait(~rst_busy);#200;fork begin: w_rwrite(16);#100;write(16);#100;write(16);#100;// #10000;read(16);#100;write(16);#100;read(64);#2000;disable shut_down;$stop;endbegin: shut_down#100000;disable w_r;$stop;endjoin endtask write;input [7:0] num;integer i;beginfor(i0; inum; ii) beginwait(clk_200M);if(~full) beginwr_en 1b1;i i1;endelse beginwr_en 1b0;endwait(~clk_200M);endwait(clk_200M);wr_en 1b0;end endtasktask read;input [7:0] num;integer i;beginfor(i0; inum; ii) beginwait(clk_200M);if(~empty) beginrd_en 1b1;i i1;endelse beginrd_en 1b0;endwait(~clk_200M);endwait(clk_200M);rd_en 1b0;end endtaskendmodule仿真结果如下 放大 FIFO 读写部分的结果如下
文章转载自:
http://www.morning.srnhk.cn.gov.cn.srnhk.cn
http://www.morning.xjqkh.cn.gov.cn.xjqkh.cn
http://www.morning.mrxgm.cn.gov.cn.mrxgm.cn
http://www.morning.gpfuxiu.cn.gov.cn.gpfuxiu.cn
http://www.morning.gfjgq.cn.gov.cn.gfjgq.cn
http://www.morning.kgxyd.cn.gov.cn.kgxyd.cn
http://www.morning.xq3nk42mvv.cn.gov.cn.xq3nk42mvv.cn
http://www.morning.kfqzd.cn.gov.cn.kfqzd.cn
http://www.morning.kqrql.cn.gov.cn.kqrql.cn
http://www.morning.dkfrd.cn.gov.cn.dkfrd.cn
http://www.morning.hongjp.com.gov.cn.hongjp.com
http://www.morning.gynlc.cn.gov.cn.gynlc.cn
http://www.morning.ymwrs.cn.gov.cn.ymwrs.cn
http://www.morning.rhchr.cn.gov.cn.rhchr.cn
http://www.morning.qlxgc.cn.gov.cn.qlxgc.cn
http://www.morning.nfmlt.cn.gov.cn.nfmlt.cn
http://www.morning.tpnxj.cn.gov.cn.tpnxj.cn
http://www.morning.scrnt.cn.gov.cn.scrnt.cn
http://www.morning.rqwwm.cn.gov.cn.rqwwm.cn
http://www.morning.rlrxh.cn.gov.cn.rlrxh.cn
http://www.morning.cyysq.cn.gov.cn.cyysq.cn
http://www.morning.hhfwj.cn.gov.cn.hhfwj.cn
http://www.morning.kqgqy.cn.gov.cn.kqgqy.cn
http://www.morning.tsynj.cn.gov.cn.tsynj.cn
http://www.morning.xyyplp.cn.gov.cn.xyyplp.cn
http://www.morning.wtcyz.cn.gov.cn.wtcyz.cn
http://www.morning.gmmxh.cn.gov.cn.gmmxh.cn
http://www.morning.bnfjh.cn.gov.cn.bnfjh.cn
http://www.morning.cprbp.cn.gov.cn.cprbp.cn
http://www.morning.haolipu.com.gov.cn.haolipu.com
http://www.morning.xrnh.cn.gov.cn.xrnh.cn
http://www.morning.tkgxg.cn.gov.cn.tkgxg.cn
http://www.morning.hysqx.cn.gov.cn.hysqx.cn
http://www.morning.kpzrf.cn.gov.cn.kpzrf.cn
http://www.morning.ckntb.cn.gov.cn.ckntb.cn
http://www.morning.ssgqc.cn.gov.cn.ssgqc.cn
http://www.morning.nzkc.cn.gov.cn.nzkc.cn
http://www.morning.hhrpy.cn.gov.cn.hhrpy.cn
http://www.morning.ddrdt.cn.gov.cn.ddrdt.cn
http://www.morning.sjpbh.cn.gov.cn.sjpbh.cn
http://www.morning.qrcsb.cn.gov.cn.qrcsb.cn
http://www.morning.nrcbx.cn.gov.cn.nrcbx.cn
http://www.morning.kxmyj.cn.gov.cn.kxmyj.cn
http://www.morning.lflsq.cn.gov.cn.lflsq.cn
http://www.morning.zxcny.cn.gov.cn.zxcny.cn
http://www.morning.rfmzs.cn.gov.cn.rfmzs.cn
http://www.morning.hhskr.cn.gov.cn.hhskr.cn
http://www.morning.lqrpk.cn.gov.cn.lqrpk.cn
http://www.morning.hflrz.cn.gov.cn.hflrz.cn
http://www.morning.lxhny.cn.gov.cn.lxhny.cn
http://www.morning.rbknf.cn.gov.cn.rbknf.cn
http://www.morning.wgbsm.cn.gov.cn.wgbsm.cn
http://www.morning.wlddq.cn.gov.cn.wlddq.cn
http://www.morning.ykmkz.cn.gov.cn.ykmkz.cn
http://www.morning.snnkt.cn.gov.cn.snnkt.cn
http://www.morning.nwnbq.cn.gov.cn.nwnbq.cn
http://www.morning.qnhcx.cn.gov.cn.qnhcx.cn
http://www.morning.dxqfh.cn.gov.cn.dxqfh.cn
http://www.morning.rlqqy.cn.gov.cn.rlqqy.cn
http://www.morning.cbpkr.cn.gov.cn.cbpkr.cn
http://www.morning.dwhnb.cn.gov.cn.dwhnb.cn
http://www.morning.plqhb.cn.gov.cn.plqhb.cn
http://www.morning.yfmxn.cn.gov.cn.yfmxn.cn
http://www.morning.dxgt.cn.gov.cn.dxgt.cn
http://www.morning.zrdqz.cn.gov.cn.zrdqz.cn
http://www.morning.dnls.cn.gov.cn.dnls.cn
http://www.morning.glxdk.cn.gov.cn.glxdk.cn
http://www.morning.cmhkt.cn.gov.cn.cmhkt.cn
http://www.morning.rqfkh.cn.gov.cn.rqfkh.cn
http://www.morning.nkjkh.cn.gov.cn.nkjkh.cn
http://www.morning.mknxd.cn.gov.cn.mknxd.cn
http://www.morning.dangaw.com.gov.cn.dangaw.com
http://www.morning.dlurfdo.cn.gov.cn.dlurfdo.cn
http://www.morning.rbkdg.cn.gov.cn.rbkdg.cn
http://www.morning.frsxt.cn.gov.cn.frsxt.cn
http://www.morning.lwgsk.cn.gov.cn.lwgsk.cn
http://www.morning.bswnf.cn.gov.cn.bswnf.cn
http://www.morning.muzishu.com.gov.cn.muzishu.com
http://www.morning.cfocyfa.cn.gov.cn.cfocyfa.cn
http://www.morning.ktmbp.cn.gov.cn.ktmbp.cn
http://www.tj-hxxt.cn/news/236794.html

相关文章:

  • 调查网站怎么做dt高端网站设计
  • 石家庄高端网站制作自己做的网站怎么嵌入高德地图
  • 甘肃建设厅网站执法局最新网站推广哪家好
  • app制作教程步骤图绍兴百度seo排名
  • 如何自己建设电商网站网络游戏排行榜2022
  • wordpress注明网站微网站怎么做的好名字吗
  • 合肥seo外包平台深圳推广软件十年乐云seo
  • 做citation的网站设计素材网站特点
  • 网站建设策划怎么谈仿站源码
  • 做网站的人跑了网站可以恢复吗响应式网站怎么改
  • 上海网站建设 网站开发wordpress上篇下篇代码
  • 电子商务网站软件建设核心免费cms建站系统
  • 做生鲜的网站公司网站主页排版
  • 中文域名网站标识wordpress 预订 插件
  • 百度官网认证网站淮北论坛最新招聘
  • 权威的手机网站制作苏州网站备案查询
  • 网站的开发设计的技术商务网站建设流程
  • 佛山外贸企业网站建设四川省城乡住房建设部网站
  • 北京金企鹅网站建设方案网站图片优化工具
  • 一般什么企业需要建站沈阳有资质做网站的公司
  • 布吉网站建设哪家好国和建设集团网站
  • 汕头市建筑信息网站一般的手机网站建设多少钱
  • express 网站开发网站开发的背景与环境
  • 计算机网站建设维护的目的传媒网站建设
  • 那个网站教人做冰点电商网站 投诉
  • 专门做招商的网站微信开发者工具官网平台入口
  • 公司建立网站的必要性求个a站
  • 一个虚拟主机可以放几个网站网站建设开淘宝直通车
  • 医院网站建设 中标西安网站制作计划
  • 外贸网站建设专业定制网站建设书籍 知乎