1、Soc读写是如何实现的?
读有效: mem_rd 读写地址:mem_rw_addr, 读取的数据mem_rd_dat, 读取数据有效:mem_rd_datvld, 写有效 mem_wr, 写数据mem_wr_dat
2、读清是如何实现的?
代码中data_err_dy实现了读清功能,data_err:1表示有效,存在错误数据,在mem总线读取之前,data_err_dy一直保持为1,mem总线读取后,将data_err_dy清零。
module soc_mem_wr ( input soc_clk , input soc_rst_n , input mem_rd , input mem_wr , input [9:0] mem_rw_addr , input [31:0] mem_wr_dat , output reg [31:0] mem_rd_dat , output reg mem_rd_datvld , input data_err , output reg send_data_enable , output reg data_down_req ); reg data_err_dy ; always @ (posedge soc_clk or negedge soc_rst_n) begin if(!soc_rst_n)begin send_data_enable <= 1'b0; data_down_req <= 1'b0 ; end else begin if(mem_wr) case(mem_rw_addr) 10'h0 : send_data_enable <= mem_wr_dat[0] ; 10'h1 : data_down_req <= mem_wr_dat[0] ; default : ; endcase end always @ (posedge soc_clk or negedge soc_rst_n) begin if(!soc_rst_n) mem_rd_datvld <= 1'b0 ; else mem_rd_datvld <= mem_rd ; always @ (posedge soc_clk or negedge soc_rst_n) begin if(!soc_rst_n) mem_rd_dat <= 32'b0; else if(mem_rd) case(mem_rw_addr) 10'h0 : mem_wr_dat <= {31'b0,send_data_enable } ; 10'h1 : mem_wr_dat <= {31'b0,data_down_req } ; 10'h2 : mem_wr_dat <= {31'b0,data_err_dy } ; default : mem_wr_dat <= 32'hffff_ffff ; endcase end //读清是如何实现的 always @ (posedge soc_clk or negedge soc_rst_n) begin if(!soc_rst_n) data_err_dy <= 1'b0; else data_err_dy <= (mem_rd&(mem_rw_addr==10'h2))? 1'b0 : data_err_dy ? data_err_dy : data_err ; endmodule
---------------------
作者:IC小鸽
来源:CSDN
原文:https://blog.csdn.net/icxiaoge/article/details/90574140
版权声明:本文为作者原创文章,转载请附上博文链接!
内容解析By:CSDN,CNBLOG博客文章一键转载插件