【问题标题】:How to expand a single bit to multi-bits depending on parameter in verilog?如何根据verilog中的参数将单个位扩展到多位?
【发布时间】:2018-05-17 15:44:43
【问题描述】:

例如,我有一个输入 wire fxparameter DATAWIDTH

我能写吗

wire [DATAWIDTH - 1 : 0] exfx;
assign exfx = {(DATAWIDTH - 1){1'b0}, fx};

将信号 fx 扩展为 DATAWIDTH 到零?

如果我想要 (DATAWIDTH - 1) 位 1 怎么办?还是更复杂的组合?

【问题讨论】:

    标签: verilog


    【解决方案1】:

    你快到了。

    assign exfx = {{(DATAWIDTH-1){1'b0}}, fx};

    这部分:{(DATAWIDTH-1){1'b0}} 是你的额外零。 然后使用 { ... } 运算符将它们添加到 fx 中。

    这是 8 个零位:{8{1'b0}}
    这也是 8 位,但模式 01010101 :{4{2'b01}}

    计数可以是表达式:{2*DATAWIDTH-1{1'b0}}

    您还可以通过重复 MS 位来使用它来对数字进行符号扩展:

    localparam WIDTH = 16;
    wire       [7:0] A;
    wire [WIDTH-1:0] B; 
    
    // Works only for WIDTH > 8 !!
    assign B = { {WIDTH-8{A[7]}} , A };
    

    【讨论】:

    • 我删除了表达式必须在括号之间的部分。我总是自动这样做,但这不是必需的。
    【解决方案2】:

    是的,您可以这样做。但是,您的 exfx 目前是 DATAWIDTH+1 大小

    简单的分配也可以 -

    assign exfx = fx;

    它会将fx 值分配给LSB,其余部分将有0s

    【讨论】:

    • 如果我想要 (DATAWIDTH - 1) 位 1 怎么办?还是更复杂的组合?
    猜你喜欢
    • 2019-07-13
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    相关资源
    最近更新 更多