从 ROM 读取数据

Reading data from ROM

我想在每个时钟周期从ROM中读取数据。我有下面的ROM程序

`timescale 1ns / 1ps 
module ROM (clk,rd,addr,data);

input wire  [5:0]addr;
output reg[1:0] data;
reg[1:0] rom [0:39];
input wire rd,clk;

 initial begin 

$readmemb ("own1.mem",rom);

end
always @(posedge clk) begin
data <=  rom[addr];
end
endmodule

addr没有递增,每次需要读取一个数据。我怎么做?附上仿真结果

时钟进程可以修改为

always @(posedge clk)
count =addr;
assign count_next =count +1;
counter <=count_next;
data <= rom[counter];

这行得通吗??在每个时钟边沿增加地址和访问数据??

测试平台

module tb_ROM;

    // Inputs
    reg clk;
    reg rd;
    reg [5:0] addr;
    wire [5:0] temp,counter;
    // Outputs
    wire [1:0] data;

    // Instantiate the Unit Under Test (UUT)
    ROM uut (
        .clk(clk), 
        .rd(rd), 
        .addr(addr), 
        .data(data)
    );

    initial begin
        // Initialize Inputs
        clk = 1;
        rd = 1;
    
      addr=0;
        // Wait 100 ns for global reset to finish
    
        // Add stimulus here

    end
     always #5 clk=~clk; 
      
endmodule

在您的测试台中,您可以添加另一个 always 块来增加地址:

always @(posedge clk) addr <= addr + 1;

或者,如果这是目标,可以将其添加到设计模块中。