|
因為我的電路需要多種clk/ y7 j8 P+ y3 o2 k! C1 k
clk比此之間有延遲的關係" f! _* ?! y' C u4 u# @# o
例如 clk clk1 clk2 clk3: [0 C4 y3 m: `5 F1 [- E0 v3 }
這些clk週期等相關設定都一樣的( C R; b2 b6 k3 D ^
唯一不同的是 clk1 比 clk 延遲0.375ns
- T% ?3 W/ F8 O2 w# C- a clk2 比 clk1 延遲0.375ns (clk2比 clk 延遲0.75ns)
; H, T3 W/ W" W! D( a5 M clk3 比 clk2 延遲0.375ns (clk3比 clk 延遲1.125ns), q( v1 m3 v! ]) }( _
但是我只要一個clk port 接出io pad' i. ^/ C; |3 `8 Y" ^. F O
也就是clk1 clk2 clk3 要由 clk產生7 B7 G; c: y2 `
因此我在verilog 寫一個 clk generator如下8 ^+ V% n; Z. A b5 i; ?
. }# T' l( v% Fmodule clk_generator (clk, clk1, clk2, clk3); 0 r1 \7 n4 I8 u5 f) B5 d
input clk ;8 n! W6 ~" f: ?3 S
output clk1, clk2, clk3 ;
, U9 \% q ~) t: _7 N( _, e5 E buf BUF_0(clk1,clk);9 E7 U& o* @* }! G: R1 z' l% h
buf BUF_2(clk2,clk1);1 U+ ]: C- K$ B! {. m
buf BUF_3(clk3,clk2);- f% H' F- k- q$ Q5 N
endmodule
- E' o; B6 z9 A. L
! `2 x9 \* t; A( U再我主要的module中引用如下' V) c2 u$ l: |
module s4478( GND, VDD, clk, G1, G2, G3, G4, G5,OUT1, OUT2, OUT3, OUT4, OUT5, error );
( }0 d6 G4 z3 y( K: L, M) C input GND, VDD, clk, G1, G2, G3, G4, G5;
+ B9 w9 ~( ~7 ? output OUT1, OUT2, OUT3, OUT4, OUT5, error;
: R2 O& J" z. F/ c6 U9 U wire clk1, clk2, clk3 ;
& V/ o. {2 c! ?., s% R1 I! R1 z4 Q( z
.* k: i g8 A. L f3 c
clk_generator clk_generator ( .clk(clk), .clk1(clk1), .clk2(clk2), .clk3(clk3) ); ( A/ S( t L: l" w. R
.
2 T1 A x' g7 M.1 q: w. q5 Y; ^( V/ V
end module9 T1 ?% d" `$ i$ k' ]' R- s
. L+ F* w5 d2 S( |
design vision 指令 clk部分描述如下 ' l4 V9 g1 X( D
, e1 P4 v3 S* o" {( ~current_design $active_design
- _! ~/ y/ v1 S# Acreate_clock [get_ports clk] -period 4 -waveform {0 2}
* q/ h8 w1 R- l" Lset_clock_uncertainty 0.3 [get_ports clk]
2 n8 f0 J* W/ Aset_clock_transition 0.3 [get_ports clk]7 M/ ` E8 f( L* l# a
set_fix_hold [get_clocks clk]
) I; D9 `6 \8 ?: E. u& k3 p: i; o1 \9 aset_dont_touch_network [all_clocks]
6 E' l" |4 w( ^6 L1 X; ?6 \set_drive [drive_of "CCU90mt1_05V_FBB_0909/INVd1/zn"] [get_ports clk]
: T3 U& g0 Y: e" i6 k% j& qcreate_generated_clock -name clk1 -source clk -divide_by 1 [get_pins clk_generator/clk1]7 Y0 h! _' `9 L$ \: L
set_clock_latency 0.375 [get_pins clk_generator/clk1]+ l# f, R2 U; b3 O( T6 X" x
create_generated_clock -name clk2 -source clk -divide_by 1 [get_pins clk_generator/clk2]7 ? h. ]/ x" y; ?# T$ L$ \1 c2 Y
set_clock_latency 0.75 [get_pins clk_generator/clk2]+ l9 R. R/ H: j4 y* O0 m
create_generated_clock -name clk3 -source clk -divide_by 1 [get_pins clk_generator/clk3]: f9 q( f' w4 T
set_clock_latency 1.125 [get_pins clk_generator/clk3]
f4 X9 u% H/ }# \ T! w" [; g1 k7 E6 T# |
結果我的clk tree只有最原始的clk
3 I0 |- H; r5 [clk1 clk2 clk3 都沒長出來
1 b% u/ H8 J' R不知是那裡用錯了或遺漏了 - K5 a" ~9 n' q+ M3 d
或是encounter clk沒設定好0 o" H% v/ T z0 \0 D) l0 L
用了很久都用不好, d' W% D+ i b- E1 V$ E# l
只好請教各位3 G: b# R' e" G9 B3 V
萬分感謝 |
|