【发布时间】:2018-05-17 15:44:43
【问题描述】:
例如,我有一个输入 wire fx 和 parameter DATAWIDTH。
我能写吗
wire [DATAWIDTH - 1 : 0] exfx;
assign exfx = {(DATAWIDTH - 1){1'b0}, fx};
将信号 fx 扩展为 DATAWIDTH 到零?
如果我想要 (DATAWIDTH - 1) 位 1 怎么办?还是更复杂的组合?
【问题讨论】:
标签: verilog
例如,我有一个输入 wire fx 和 parameter DATAWIDTH。
我能写吗
wire [DATAWIDTH - 1 : 0] exfx;
assign exfx = {(DATAWIDTH - 1){1'b0}, fx};
将信号 fx 扩展为 DATAWIDTH 到零?
如果我想要 (DATAWIDTH - 1) 位 1 怎么办?还是更复杂的组合?
【问题讨论】:
标签: verilog
你快到了。
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,其余部分将有0s
【讨论】: