Я пытаюсь смоделировать следующий код для асинхронного оперативной памяти в Verilog.Но dout
остается хххх все время.В первый раз, когда я попробовал код dout
был равен din
для времени, когда сигнал записи был 1. После того, как это было все xxxx. Может кто-нибудь сказать мне проблему? Было бы здорово, если бы вы могли предложить лучшекод.
module ram(cs,wr,addr,din,dout);
parameter adds = 10, wsize =16, memsize =1024;
input cs,wr;
input [adds-1:0] addr;
input [wsize-1 : 0]din;
output [wsize-1:0]dout;
reg [wsize-1:0] mem [memsize-1:0];
assign dout = mem[addr];
always @(cs or wr)
begin
if(wr) mem[addr]= din;
end
endmodule
Стенд для вышеуказанного кода:
module ramtest;
// Inputs
reg cs;
reg wr;
reg [9:0] addr;
reg [15:0] din;
// Outputs
wire [15:0] dout;
integer k,myseed;
// Instantiate the Unit Under Test (UUT)
ram uut (
.cs(cs),
.wr(wr),
.addr(addr),
.din(din),
.dout(dout)
);
initial begin
for(k = 0; k<=1023; k = k+1)
begin
din = k % 256; wr = 1; cs= 1;addr= k ;
end
repeat(20)
begin
#2 addr = $random(myseed) % 1024 ;
wr = 0; cs =1;
$display("Address = %5d, data = %4d",addr,dout);
end
end
initial myseed = 35 ;
endmodule