10:1024-битный декодер в Verilog
Я попытался реализовать 10:1024-битный декодер в verilog с соответствующим тестовым стендом, используя поведенческое моделирование. Код показан ниже.
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-битного декодера...
1 ответ
Так как вы объявили i
как reg [9:0]i;
, следующее никогда не будет правдой: i == 1024
, после 1023 "i" просто переполняется и снова становится "0".
Итак, ваш цикл никогда не закончится.
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