如何根据verilog中的参数将单个位扩展到多位?



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

我可以写吗

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

到零将信号 fx 扩展到数据宽度?

如果我想要(DATAWIDTH - 1(位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 };

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

一个简单的分配也可以 -

assign exfx = fx;

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

最新更新