verilog中的10:1024位解码器

verilog中的10:1024位解码器,verilog,decoder,vlsi,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 e

我尝试在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
模块解码器(输入[9:0]地址,输出寄存器[1023:0]添加);
reg[9:0]i;
始终@(地址)开始

对于(i=0;i,由于您将
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

由于您将
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
assign add=1024'b1
assign add=1024'b1