说我在设计中有2个多位reg。它们中的一个都具有共同的条件(cond_x
)作为使能,但是除了cond_y
信号何时复位外,它们中的1个还具有额外的条件(reset
)。>
示例(为简单起见,忽略代码的重置部分)-
相同总是阻止
always @(posedge clock) begin
if(cond_x) begin
a <= a_next;
b <= b_next;
else if(cond_y) begin
b <= 5'b0;
end
end
不同总是会阻塞
always @(posedge clock) begin
if(cond_x) begin
a <= a_next;
end
end
always @(posedge clock) begin
if(cond_x) begin
b <= b_next;
else if(cond_y) begin
b <= 5'b0;
end
end
当我合成2时,得到的regs数量比设计中预期的要多。使用1表示准确。额外的寄存器仅适用于b
的低两位,并带有__rep1
后缀。不知道这意味着什么或如何创建它。
是否有相同的可能原因?我正在使用Synopsys DC
答案 0 :(得分:1)
Design Compiler可以复制单元以改善时序,负载等,并且复制的单元具有后缀_rep<n>
。 DC Ultra的datasheet具有以下解释:
DC Ultra在运行过程中着眼于关键路径的较大部分 逻辑复制,并且可以复制许多门以减少高负载 扇出网,因此改善了通过负载的关键路径上的时序 隔离。
尽管两个代码段看起来相同,但是DC可以根据起始条件产生不同的结果。对于b[1:0]
,第二个代码很可能被合成为一个较差的电路,并且该工具必须复制这两个触发器。