我需要随机化一个大的记忆。所有的数据都包含在锁存模块内部-每比特1。
如何解决以下问题?
// Quick mock up of the memory, which I can't change
`define WIDTH 64*144
module latch(
output reg Q);
endmodule
module memory;
wire [`WIDTH-1:0] latchData;
latch latch[`WIDTH-1:0] (.Q(latchData[`WIDTH-1:0]));
endmodule
// My testbench, which I can change
module test;
reg [31:0] index;
memory memory();
initial begin
$display("Initial data: %0d", memory.latchData);
injectRandomData();
$display("Randomized data: %0d", memory.latchData);
end
task injectRandomData();
// Using for loop does not work
//for (index=0; index < `WIDTH; index = index+1) begin
// memory.latch[index].Q = $urandom;
//end
// Doing it this way seems terrible
memory.latch[0].Q = $urandom;
memory.latch[1].Q = $urandom;
memory.latch[2].Q = $urandom;
// ... a bunch more to go; don't wait up
endtask
endmoduleEDA游乐场代码:http://www.edaplayground.com/s/4/235
发布于 2013-10-14 19:44:24
快速而肮脏的解决方案:
task injectRandomData();
->do_InjectRandomData;
#0; // gen always block a change to finish;
endtask
event do_InjectRandomData;
genvar index;
generate
for(index = 0; index < `WIDTH; index = index +1) begin : gen_loop
always @(do_InjectRandomData) begin : set_rand
memory.latch[index].Q = $urandom;
end
end
endgenerateEDA游乐场代码:http://www.edaplayground.com/s/6/236
https://stackoverflow.com/questions/19367581
复制相似问题