【问题标题】:10:1024 bit decoder in verilogVerilog 中的 10:1024 位解码器
【发布时间】:2018-04-24 16:45:51
【问题描述】:

我尝试通过使用行为建模的适当测试台在 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 位解码器...

【问题讨论】:

  • assign add = 1024'b1 &lt;&lt; address;

标签: verilog decoder vlsi


【解决方案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

【讨论】:

    猜你喜欢
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多