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
Другие вопросы по тегам