Verilog 避免计算特定位

Verilog 避免计算特定位,verilog,system-verilog,Verilog,System Verilog,这样的计算是否可以只保留最后的X位 a_register <= some_addr - {some_addr[(width-1):limit],limit{1'b0}} //can it be done in one line of code? Like: //a_register <= some_addr - {some_addr[(width-1):limit],limit{1'b0}} [X:0] a_寄存器如果只想保留计算的最后N位,只需将a_寄存器设置为大小N。赋值将只取

这样的计算是否可以只保留最后的X位

a_register <= some_addr - {some_addr[(width-1):limit],limit{1'b0}}
//can it be done in one line of code? Like:
//a_register <= some_addr - {some_addr[(width-1):limit],limit{1'b0}} [X:0]

a_寄存器如果只想保留计算的最后N位,只需将
a_寄存器
设置为大小N。赋值将只取计算的最后N位。如果出于某种原因需要将
a_寄存器
增大,则始终只能选择
a_寄存器
的最后N位,并将该值指定为:

a_register[X:0] <= some_addr - {some_addr[(width-1):limit],limit{1'b0}};

(虽然不是1行)

您可以为串联导线分配一个用于LSB的temp变量,该变量应向合成工具明确说明这些位未使用,可以优化

wire [4:0] temp;

assign {a_register, temp} = some_addr - {some_addr[(width-1):limit],limit{1'b0}};

reg[4:0]温度;
始终@(posedge clk)开始
{a_寄存器,temp}
wire [4:0] temp;

assign {a_register, temp} = some_addr - {some_addr[(width-1):limit],limit{1'b0}};
reg [4:0] temp;

always @(posedge clk) begin 
  {a_register, temp} <= some_addr - {some_addr[(width-1):limit],limit{1'b0}};
end