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

时间:2018-05-17 06:55:12

标签: verilog

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

我可以写

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

将零信号fx扩展为DATAWIDTH?

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

2 个答案:

答案 0 :(得分:3)

你快到了。

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 };

答案 1 :(得分:0)

是的,你可以这样做。但是,您的exfx目前为DATAWIDTH + 1尺寸

简单的分配也有效 -

assign exfx = fx;

它会将fx值分配给LSB,并在其余部分显示0