Verilog中单口RAM的代码实现

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

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

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

代码如下:

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

module top 
(
 input [7:0] data,
 input [5:0] addr,
 input wr,
 input clk,
 output [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[addr] <= data;
 addr_reg <= addr;
end
assign q = ram[addr_reg]; //read data 
endmodule

激励文件如下:

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

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
下面是使用单口RAM实现乒乓FIFO的Verilog代码示例: ```verilog module PingPongFIFO ( input wire clk, input wire reset, input wire write_en, input wire read_en, input wire [7:0] write_data, output wire [7:0] read_data, output wire empty, output wire full ); parameter DATA_WIDTH = 8; parameter DEPTH = 16; reg [DATA_WIDTH-1:0] mem [DEPTH-1:0]; reg [4:0] write_ptr; reg [4:0] read_ptr; reg [4:0] count; wire wr_ptr_inc = (write_en && !full) ? write_ptr + 1 : write_ptr; wire rd_ptr_inc = (read_en && !empty) ? read_ptr + 1 : read_ptr; assign read_data = mem[read_ptr]; assign empty = (count == 0); assign full = (count == DEPTH); always @(posedge clk or posedge reset) begin if (reset) begin write_ptr <= 0; read_ptr <= 0; count <= 0; end else begin if (write_en && !full) write_ptr <= wr_ptr_inc; if (read_en && !empty) read_ptr <= rd_ptr_inc; if (write_en && read_en && !full && !empty) count <= count; else if (write_en && !read_en && !full) count <= count + 1; else if (!write_en && read_en && !empty) count <= count - 1; end end always @(posedge clk) begin if (write_en && !full) mem[write_ptr] <= write_data; end endmodule ``` 这段代码与之前的示例代码相同,使用了单口RAM作为存储器,并实现了乒乓FIFO的读写功能。单口RAM在这里被用来存储数据,通过读写指针进行数据的读写操作。其他部分的逻辑与之前的示例相同。 请注意,这只是一个简单的乒乓FIFO的实现示例,您可以根据需要进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

king_machine design

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

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

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

打赏作者

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

抵扣说明:

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

余额充值