当前位置:   article > 正文

Verilog中单口RAM的代码实现

Verilog中单口RAM的代码实现

单口 RAM 的写地址与读地址共用一个地址,代码如下,其中

 reg [7:0] ram [63:0];

意思是定义了 64 个 8 位宽度的数据。其中定义了 addr_reg,可以保持住读地址,延迟一周期之后将数据送出。

代码如下:

(CSDN代码块不支持Verilog,代码复制到notepad++编辑器中,语言选择Verilog,看得更清楚)

  1. module top
  2. (
  3. input [7:0] data,
  4. input [5:0] addr,
  5. input wr,
  6. input clk,
  7. output [7:0] q
  8. );
  9. reg [7:0] ram[63:0]; //declare ram
  10. reg [5:0] addr_reg; //addr register
  11. always @ (posedge clk)
  12. begin
  13. if (wr) //write
  14. ram[addr] <= data;
  15. addr_reg <= addr;
  16. end
  17. assign q = ram[addr_reg]; //read data
  18. endmodule

激励文件如下:

  1. `timescale 1 ns/1 ns
  2. module top_tb() ;
  3. reg [7:0] data ;
  4. reg [5:0] addr ;
  5. reg wr ;
  6. reg clk ;
  7. wire [7:0] q ;
  8. initial
  9. begin
  10. data = 0 ;
  11. addr = 0 ;
  12. wr = 1 ;
  13. clk = 0 ;
  14. end
  15. always #10 clk = ~clk ;
  16. always @(posedge clk)
  17. begin
  18. data <= data + 1'b1 ;
  19. addr <= addr + 1'b1 ;
  20. end
  21. top t0(.data(data),
  22. .addr(addr),
  23. .clk(clk),
  24. .wr(wr),
  25. .q(q)) ;
  26. endmodule

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/603053
推荐阅读
相关标签
  

闽ICP备14008679号