app_en;表示命令使能; app_autoprechareg自动刷新; app_wdf_data;写数据; app_wdf_end;写结束; app_wdf_mask;掩码,表示写数据byte有效情况; app_wdf_wren;写数据使能; app_rdy表示ready; app_rd_data表示读数据; app_rd_data_end; app_rd_data_valid; app_wdf_rdy; app_ref_req; app_ref_ack; a...
.c0_ddr4_app_wdf_wren(c0_ddr4_app_wdf_wren), // input wire c0_ddr4_app_wdf_wren .c0_ddr4_app_rd_data_end(c0_ddr4_app_rd_data_end), // output wire c0_ddr4_app_rd_data_end .c0_ddr4_app_rd_data_valid(c0_ddr4_app_rd_data_valid), // output wire c0_ddr4_app_rd_dat...
结合上图,写时序总结如下:首先需要检查app_wdf_rdy,该信号为高表明此时IP核数据接收处于准备完成状态,可以接收用户发过来的数据,在当前时钟拉高写使能(app_wdf_wren),给出写数据(app_wdf_data)。这样加上发起的写命令操作就可以成功向IP核写数据。这里有一个信号app_wdf_mask,它是用来屏蔽写入数据的,该信号为高...
核心代码如下,具体详见fm_add_ddr_to_bram.sv项目文件: if(state == WR & (wr_cmd_cnt < WR_MAX -1))begincmd_en <= app_rdy & app_wdf_wren;//cope with the discontinuity of write dataend 模块化对于设计便捷性的提升 此处的“模块化”指:通过模块启动信号module_en和模块完成信号module_done实...
如PHY RATIO = 2:1 (即MC Clock: UI Clock = 2:1),那么每个app_addr就要对应两个周期的数据,每个周期32 bits,此时app_wdf_end就要在每第二个周期拉高。 关键问题4:app_wdf_wren的及时拉低。由于写命令通道和写数据通道的分离,编写代码时应尤其注意app_wdf_wren信号的及时拉低。否则,即使在app_cmd反复...
c0_ddr4_app_en <= '1'; end if; if (c0_ddr4_app_wdf_rdy = '1' and write_Counter <= Command_counter ) then c0_ddr4_app_wdf_data <= RAM_RData; // write data from BRAM to DDR4 c0_ddr4_app_wdf_wren <= '1'; c0_ddr4_app_wdf_end <= '1'; write_Counter <= write...
结合上图,写时序总结如下:首先需要检查app_wdf_rdy,该信号为高表明此时IP核数据接收处于准备完成状态,可以接收用户发过来的数据,在当前时钟拉高写使能(app_wdf_wren),给出写数据(app_wdf_data)。这样加上发起的写命令操作就可以成功向IP核写数据。这里有一个信号app_wdf_mask,它是用来屏蔽写入数据的,该信号为高...
'0' when (wr_fifo_empty_SIG='1' or MIG_to_bridge_ddr_app_rdy_SIG='0' or MIG_to_bridge_ddr_app_wdf_rdy_SIG='0' or rst='1');--- bridge_to_MIG_ddr_cmd_wr_en_SIG is app_wdf_en and app_wdf_end --- bridge_to_MIG_ddr_wr_addr_SIG is app_addrLooking...
err_num = err_num +1;end 问题3(未解决):大数据规模下出现问题。 本工程在矩阵规模≤128×4时运行无误,经测试,在矩阵规模=256×4时出现一定问题(app_wdf_rdy在数据传输后期很长时间才拉高一个周期,严重影响传输效率)。此问题待排查。 代码仓库地址:GeorgeLin200100/FM_ADD (github.com)。欢迎指正!
[255:0]ddr4_app_wdf_data;reg[31:0]ddr4_app_wdf_mask;//---CMD---always@(posedgeddr4_clkornegedgeddr4_rst_n)beginif(!ddr4_rst_n)beginstate_cs<=IDLE;endelsebeginstate_cs<=state_ns;endendalways@(*)begincase(state_cs)IDLE:beginif(process_start)beginstate_ns=WR_DDR;endelsebegin...