作者pdgwu (熙)
看板Electronics
标题[问题] verilog 组合逻辑的delay
时间Mon Oct 27 04:16:24 2008
// module decoder
input clk;
input reset;
input [7:0] inData;
output [15:0] outData;
reg [3:0] state;
reg [3:0] next_state;
// sequential logic
always @(posedge clk or posedge reset)
begin
if(reset)
state <= S0;
else
state <= next_state;
end
// combinational logic : FSM and Decoder
always @(state or inData)
begin
outData = 16'h0000;
case(state)
S0:
begin
// ...
next_state = S1;
end
S1:
begin
// ...
case(inData[3:0])
4'b0000:
outData = 16'h1234;
4'b0001:
outData = 16'h5678;
...
endcase
next_state = S2;
end
S2:
...(略)
default:
...
endcase
end
观察 timing analyzer 发现
worst-case tpd 约为18ns,worst-case tco 约为10ns
Clock "clk" internal fmax 可达340MHz
若上述module为M1,且M1输出的结果要作为某个FIFO(rising edge trigger)的输入
目前希望使用100MHz作为M1和FIFO的clock来源
但是根据上面分析却发现组合逻辑在tpd的延迟超过了一个clock cycle(10n)的长度
如此一来其後的FIFO无法正确写入M1来的资料
是否一定要将clock频率降低来配合组合逻辑的延迟...
或者改变M1输出维持2个clocks以上-->但是这样跟把clock频率降低好像类似 ~"~
还是有其他coding的技巧可以合成出较小延迟的电路
一般这样的问题该如何解决呢? 为何有些电路都可以做到很高的处理频率?
谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.193.11.210
1F:推 obov:想办法optimize ur comb logic for min delay 10/27 08:49
2F:→ obov:如果不行 就得重改state & logic 10/27 08:51
3F:推 horsehead:你是使用altera的maxii对吧 去quartus ii 里面的 10/27 23:35
4F:→ horsehead:assignment editor 下 tpd 的 timing constraint 10/27 23:36
5F:→ horsehead:指定最小tpd数值 但是每个晶片都有其optimize的极限 10/27 23:38
6F:→ horsehead:所以不一定会过 如果无法达成就只能改你电路架构了 10/27 23:38
7F:推 horsehead:不过把tpd用timing constraint从18改成10应该还可以 10/27 23:42
8F:→ horsehead:就先试试看吧 10/27 23:42
9F:→ pdgwu:感谢两位的宝贵意见,先试着做做看,有问题再向各位请教m()m 10/28 14:23