10: 1024-битный декодер в Verilog - PullRequest
0 голосов
/ 24 апреля 2018

Я попытался реализовать 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 Ответ

0 голосов
/ 24 апреля 2018

Поскольку вы объявили 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
...