verilog中的10:1024位解码器

时间:2018-04-24 16:45:51

标签: verilog decoder vlsi

我尝试使用行为建模在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位解码器...

1 个答案:

答案 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