Verilog中伪双口 RAM的代码实现

伪双口 RAM 的读写地址是独立的,可以随机选择写或读地址,同时进行读写操作。代码如下,在激励文件中定义了 en 信号,在其有效时发送读地址。

代码如下:

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

module top 
(
 input [7:0] data,
 input [5:0] write_addr,
 input [5:0] read_addr, 
 input wr,
 input rd,
 input clk,
 output reg [7:0] q 
);
reg [7:0] ram[63:0]; //declare ram 
reg [5:0] addr_reg; //addr register 
always @ (posedge clk)
begin
 if (wr) //write 
 ram[write_addr] <= data;
 if (rd) //read 
 q <= ram[read_addr];
end
endmodule

激励文件如下:

`timescale 1 ns/1 ns 
module top_tb() ;
reg [7:0] data ; 
reg [5:0] write_addr ;
reg [5:0] read_addr ; 
reg wr ;
reg clk ;
reg rd ;
wire [7:0] q ;
initial
begin
 data = 0 ;
 write_addr = 0 ;
 read_addr = 0 ;
 wr = 0 ;
 rd = 0 ;
 clk = 0 ;
 #100 wr = 1 ;
 #20 rd = 1 ;
end
always #10 clk = ~clk ;
always @(posedge clk)
begin
 if (wr)
 begin
 data <= data + 1'b1 ;
 write_addr <= write_addr + 1'b1 ;
 if (rd) 
 read_addr <= read_addr + 1'b1 ;
 end
end
top t0(.data(data),
 .write_addr(write_addr),
 .read_addr(read_addr),
 .clk(clk),
 .wr(wr),
 .rd(rd),
 .q(q)) ;
endmodule

  • 13
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

king_machine design

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值