【发布时间】:2019-04-24 03:47:24
【问题描述】:
我正在尝试了解我朋友的 verilog 设计,他将大逻辑分解为小逻辑,他说这有助于他解决时序问题。但是我不明白为什么,因为综合之后,那些只是一堆 AND 和 OR 门,逻辑是一样的,这怎么能减少延迟? 这是原始代码:
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
【问题讨论】:
-
如果您使用的是 Xilinx,我建议您查看两者的原理图输出并进行比较。除此之外,很难判断两者是否会导致不同的合成。我不知道你还能怎么知道。
标签: verilog