|
因為我的電路需要多種clk
, o4 r7 a4 M/ l" Rclk比此之間有延遲的關係5 d P# j% y% ]' [ ~5 h0 D
例如 clk clk1 clk2 clk3
' d2 i' |/ ~5 o, L5 o( A! h2 T這些clk週期等相關設定都一樣的6 ^3 ^- ?% M! R* I& O
唯一不同的是 clk1 比 clk 延遲0.375ns* U0 s; ^+ o2 R+ q% F; ?
clk2 比 clk1 延遲0.375ns (clk2比 clk 延遲0.75ns)
% d, y& V4 p3 u3 E clk3 比 clk2 延遲0.375ns (clk3比 clk 延遲1.125ns)1 h2 x7 Z- Q' }: i+ m6 V0 o! T
但是我只要一個clk port 接出io pad
4 v, r$ |# Q. ^- c/ U- S6 L也就是clk1 clk2 clk3 要由 clk產生
/ o% x2 q4 g+ ^, H# T0 @因此我在verilog 寫一個 clk generator如下
0 `4 ?4 G$ q" D, Y9 ?7 l) M: f6 A4 @ N- B! t
module clk_generator (clk, clk1, clk2, clk3); 4 N# I) @6 j! N* G" {
input clk ;1 `+ H+ }" n6 X7 e. m4 o3 g
output clk1, clk2, clk3 ;9 ^) g3 u s, ]+ D v& E
buf BUF_0(clk1,clk);! I7 X# \& p* ~' f$ t: l
buf BUF_2(clk2,clk1);
& R0 ?! m9 c4 c+ Q9 Q' ] buf BUF_3(clk3,clk2);& ]2 i+ m9 k1 w) K5 D
endmodule
; F w6 |/ C9 u0 k) a: S2 ^& u
. ?1 X4 Z! S+ s' D7 j再我主要的module中引用如下
Y+ i- v% o0 V, Gmodule s4478( GND, VDD, clk, G1, G2, G3, G4, G5,OUT1, OUT2, OUT3, OUT4, OUT5, error );
' U; z" i3 e/ W( x input GND, VDD, clk, G1, G2, G3, G4, G5;
; [( ~' W" u0 S# g output OUT1, OUT2, OUT3, OUT4, OUT5, error;
# J6 e. K0 n& W8 L8 e wire clk1, clk2, clk3 ;
7 ?9 {# {+ Q- N& }* q) J.
) Y! s g4 `6 O& o" m B1 z: u.+ \( G- w: K' B" ^8 o
clk_generator clk_generator ( .clk(clk), .clk1(clk1), .clk2(clk2), .clk3(clk3) );
7 G% {! p% j2 v# r! o.
1 j4 j$ N9 `- H. z5 t.0 l# K; s7 N0 m2 Q9 v! `& p" D
end module D' n5 O5 h9 M- u; C7 s, o4 h
+ x3 H1 I* |7 E, v
design vision 指令 clk部分描述如下 % I2 U/ p6 e2 D" j- e
5 E0 I" W: ]( s! j j! j; f8 _, I! U+ gcurrent_design $active_design ; B+ G9 x; P$ |' X! H* D; w
create_clock [get_ports clk] -period 4 -waveform {0 2}
9 l" f# F3 V# k% x4 mset_clock_uncertainty 0.3 [get_ports clk]
! ^/ a# u4 Z) H7 }set_clock_transition 0.3 [get_ports clk]& k/ _. N$ N \
set_fix_hold [get_clocks clk]4 b2 M. i2 ~% @" S+ E( _
set_dont_touch_network [all_clocks]
6 D' A1 Y! K5 P$ l" r7 d* Eset_drive [drive_of "CCU90mt1_05V_FBB_0909/INVd1/zn"] [get_ports clk]
9 n3 F! X3 K2 z5 mcreate_generated_clock -name clk1 -source clk -divide_by 1 [get_pins clk_generator/clk1]+ y3 h8 S2 u+ w# D& d3 T
set_clock_latency 0.375 [get_pins clk_generator/clk1]' X) Z9 M# E, f
create_generated_clock -name clk2 -source clk -divide_by 1 [get_pins clk_generator/clk2]. ?* ~2 W( d: B6 M, o" b
set_clock_latency 0.75 [get_pins clk_generator/clk2]
& @( _. B% }+ C' x! zcreate_generated_clock -name clk3 -source clk -divide_by 1 [get_pins clk_generator/clk3]/ q5 {1 a* O( r* b5 u+ F
set_clock_latency 1.125 [get_pins clk_generator/clk3]
' K4 C# S7 W0 U2 C `+ {( P R- O9 g
結果我的clk tree只有最原始的clk5 g0 [0 w V) X8 O. ^
clk1 clk2 clk3 都沒長出來0 Q, @+ r7 I0 L0 z& c( R- o- r$ ?
不知是那裡用錯了或遺漏了 % k9 q5 `3 J2 F8 i9 w7 t
或是encounter clk沒設定好+ x f! f0 K% X; K
用了很久都用不好9 p+ M1 L4 q6 z, d0 x
只好請教各位
6 R) R# r7 G! `1 p8 K+ C萬分感謝 |
|