我尝试使用行为建模在verilog中使用适当的测试平台实现10:1024位解码器。该守则如下所示。
module decoder(input [9:0]address,output reg [1023:0]add);
reg [9:0]i;
always@(address) begin
for(i=0;i<1024;i=i+1) begin
add[i]=(address==i)?1'b1:1'b0;
end
end
endmodule
module tg(output reg [9:0]address,input [1023:0]add);
initial begin
$monitor($time,,,,"address=%b add=%b",address,add);
address=1023;
#2 address=0;
#2 address=1;
#2 $finish;
end
endmodule
module wb;
wire [9:0]a;
wire [1023:0]b;
decoder d1(a,b);
tg tg_1(a,b);
endmodule
但是在编译后运行代码时没有看到o / p ... 帮我修改一下这段代码来实现10:1024位解码器...
答案 0 :(得分:3)
由于您将i
声明为reg [9:0]i;
,因此以下情况永远不会成立:i == 1024
。在1023&#39; i&#39;之后只会溢出并成为&#39; 0&#39;试。
所以,你的循环永远不会退出。
for(i=0;i<1024;i=i+1) begin // will always be less than 1024
add[i]=(address==i)?1'b1:1'b0;
end
将其设为reg [10:0]
或将其声明为integer
。
integer i; // <<<
always@(address) begin
for(i=0;i<1024;i=i+1) begin
add[i]=(address==i)?1'b1:1'b0;
end
end