是否可以仅保留这样的计算中的最后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]
答案 0 :(得分:1)
您可以使用LSB的临时变量分配连接线,这应该使合成工具清楚地知道这些位未被使用并且可以被优化掉。
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
答案 1 :(得分:0)
如果您只想保留计算的最后N位,则只需要使a_register
大小为N.分配将仅采用计算的最后N位。如果由于某种原因需要a_register
更大,则始终只能选择a_register
的最后N位并指定值:
a_register[X:0] <= some_addr - {some_addr[(width-1):limit],limit{1'b0}};
你目前所做的不起作用;但是你总是可以使用临时值来存储计算结果并取[X:0]
。{/ p>
assign temp = some_addr - {some_addr[(width-1):limit],limit{1'b0}};
...
a_register <= temp[X:0];
(虽然它不是1行)