Verilog 避免计算特定位
这样的计算是否可以只保留最后的X位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。赋值将只取
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