【问题标题】:Writing random data to a RAM in a testbench将随机数据写入测试台中的 RAM
【发布时间】:2021-01-05 19:40:52
【问题描述】:

我在 Verilog 中使用 RAM,我需要实现一个测试台,我将在其中确认三个内存进程(写入数据、读取数据和读取命令)的正确操作。我写了一个测试台,它似乎在读写一些整数,但是有没有办法用单词或字符串填充内存以使随机更清晰?

这是我的测试平台:

module ramtest();
  
parameter WORD_SIZE=8;
parameter ADDR_WIDTH=8;
parameter RAM_SIZE=1<<ADDR_WIDTH;
  
reg we;
reg re;
reg [ADDR_WIDTH-1:0] addr;
reg [ADDR_WIDTH-1:0] instraddr;
reg [WORD_SIZE-1:0] datawr;
reg Clk;
  
reg [WORD_SIZE-1:0] mem[RAM_SIZE-1:0];
  
wire [WORD_SIZE-1:0] datard;
wire [WORD_SIZE-1:0] instrrd;
  
MCPU_RAMController raminst (.we(we),.datawr(datawr),.re(re),.addr(addr),.datard(datard),.instraddr(instraddr),.instrrd(instrrd));
integer i;
initial begin 
   we=0;
   datawr=0;
   instraddr=0;
   addr=1;
   
   
   #20;
   for(i=0;i<RAM_SIZE;i=i+1) begin
     datawr=i;
     addr=i-1;
     #10;
   end
   we=0;
   addr=1;
   instraddr=0;
   for(i=0;i<RAM_SIZE;i=i+1) begin
     
     addr=i-1;
     #10;
   end
    
end
 
endmodule

这是我需要测试的 RAM 控制器代码:

module MCPU_RAMController(we, datawr, re, addr, datard, instraddr, instrrd);
parameter WORD_SIZE=8;
parameter ADDR_WIDTH=8;
parameter RAM_SIZE=1<<ADDR_WIDTH;

input we, re;

input [WORD_SIZE-1:0] datawr;

input [ADDR_WIDTH-1:0] addr;
input [ADDR_WIDTH-1:0] instraddr;

output [WORD_SIZE-1:0] datard;
output [WORD_SIZE-1:0] instrrd;

reg [WORD_SIZE-1:0] mem[RAM_SIZE-1:0];


reg [WORD_SIZE-1:0] datard;
reg [WORD_SIZE-1:0] instrrd;

always @ (addr or we or re or datawr)
begin
  if(we)begin
    mem[addr]=datawr;
  end
  if(re) begin
    datard=mem[addr];
  end
end


always @ (instraddr)
begin
    instrrd=mem[instraddr];
end


endmodule

【问题讨论】:

标签: verilog ram


【解决方案1】:

目前,您在递增地址处使用递增值(0、1、2 等)填充内存。用随机数据值填充内存的一种方法是使用$random 系统函数。

在测试台中,更改:

 datawr=i;

到:

 datawr=$random;

另请参阅 IEEE Std 1800-2017,第 18.13 节 随机数系统函数和方法,了解更现代的随机函数($urandom 等)。

【讨论】:

    猜你喜欢
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 2016-11-12
    • 2013-11-01
    • 2021-06-02
    • 2014-12-21
    • 2013-05-16
    • 1970-01-01
    相关资源
    最近更新 更多