左对齐并用零填充一个输入到另一个输入的大小

Left-justify and pad with zeros one input to the size of another input

我想比较两个输入的位大小,比如 Nx。我会减去位数 (m = size(N) - size(x)) 并将 m 个零连接到 x 的 LSB。我如何使用 Verilog 解决这个问题?

例如N的大小是16位,说x1011(即x的大小是4位)。所以 m 是 12 位。我想要得到的输出是将 12 位的 0 连接到 LSB。输出将是 1011000000000000.

我认为您对“比较”这个词的使用令人困惑。听起来您想将 x 的赋值左对齐到 N,并在右侧填充 0。通常 Verilog 右对齐并在左侧填充 0。

除非您首先使用参数来声明 Nx 的大小,否则在 Verilog 中无法轻易做到这一点。那么你可以这样写:

reg [sizeN-1:0] N;
reg [sizex-1:0] x;
...
N = {x,{sizeN-sizex{1'b0}}};

如果您可以使用 SystemVerilog,它具有 $bits 系统函数,可以让您对向量进行内省,而 Verilog 没有。

N = {x,{$bits(N)-$bits(x){1'b0}}};

它还有一个流运算符,可以直接左对齐赋值

N = {>>{x}};