我试图了解我朋友的verilog设计,他将大型逻辑分解为小型逻辑,他说这有助于解决定时问题。但是我不明白为什么,因为在综合之后,这些只是一堆“与”门或“与”门,并且逻辑相同,这如何减少延迟? 这是原始代码:
assign state0 = ({104{d0_xq}} & markerState0[519:416]) |
({104{d1_xq}} & markerState1[519:416]) |
({104{d2_xq}} & markerState2[519:416]) |
({104{d3_xq}} & markerState3[519:416]);
assign state1 = ({104{d0_xq}} & markerState0[415:312]) |
({104{d1_xq}} & markerState1[415:312]) |
({104{d2_xq}} & markerState2[415:312]) |
({104{d3_xq}} & markerState3[415:312]);
assign state2 = ({104{d0_xq}} & markerState0[311:208]) |
({104{d1_xq}} & markerState1[311:208]) |
({104{d2_xq}} & markerState2[311:208]) |
({104{d3_xq}} & markerState3[311:208]);
assign state3 = ({104{d0_xq}} & markerState0[207:104]) |
({104{d1_xq}} & markerState1[207:104]) |
({104{d2_xq}} & markerState2[207:104]) |
({104{d3_xq}} & markerState3[207:104]);
assign state4 = ({104{d0_xq}} & markerState0[103:0]) |
({104{d1_xq}} & markerState1[103:0]) |
({104{d2_xq}} & markerState2[103:0]) |
({104{d3_xq}} & markerState3[103:0]);
always @(posedge clock) begin
state_xq <= {state0, state1, state2, state3, state4};
end
如果使用,有什么区别
assign state = ({520{d0_xq}} & markerState0) |
({520{d1_xq}} & markerState1) |
({520{d2_xq}} & markerState2) |
({520{d3_xq}} & markerState3);
always @(posedge clock) begin
state_xq <= state;
end
答案 0 :(得分:0)
如果这是某种ASIC技术,则可以深入研究生成的网表,并检查由于某种原因是否使用了不同的原语,因此即使逻辑上两个结构给出的结果相同,也可以实现不同的时序。无论哪种方式,这都很奇怪,我不希望看到STA结果有很大差异,但是我不是合成引擎专家。
或者,该工具还应允许您生成reg-2-reg报告,以显示路径的确切细分,这应可以揭示该工具在何处采用不同的方法(例如,对哪种操作进行操作)。