|
因為我的電路需要多種clk# F2 n" s& H8 R6 a. P
clk比此之間有延遲的關係4 L$ e. `. P$ i% v1 }
例如 clk clk1 clk2 clk3: c0 Y% G% w! l& o+ g
這些clk週期等相關設定都一樣的
0 j4 A; @3 Z0 ~4 x唯一不同的是 clk1 比 clk 延遲0.375ns
0 y, x$ D# o, R- l9 c1 ^9 }* W clk2 比 clk1 延遲0.375ns (clk2比 clk 延遲0.75ns)) v6 G6 V6 f% n' q6 `, w5 U
clk3 比 clk2 延遲0.375ns (clk3比 clk 延遲1.125ns)
8 W* g% ~1 c1 W6 d& g0 M/ g但是我只要一個clk port 接出io pad
% W" ?/ t8 s# S4 F Q+ e) F! z也就是clk1 clk2 clk3 要由 clk產生
! d: r% L/ N( K. J* B因此我在verilog 寫一個 clk generator如下
" O# \, s n- f2 F2 p( w2 i
/ z: p& e: S: e( J/ vmodule clk_generator (clk, clk1, clk2, clk3); + E2 c% M8 V$ n7 A
input clk ;
! M7 s. r$ V Y% ]6 K( e3 Q2 G output clk1, clk2, clk3 ;
( [" k8 G. S4 i8 H buf BUF_0(clk1,clk);
9 |7 n) ]9 [# K( q; K. U buf BUF_2(clk2,clk1);
9 E* g3 v) [3 D4 E3 Z% J buf BUF_3(clk3,clk2);
\0 s6 E, ^" eendmodule' [$ q( b/ G% n2 }. Q
8 J- W4 M5 L8 B. M' C再我主要的module中引用如下+ ]. p" R& {4 H" w' g2 [6 C0 b+ d
module s4478( GND, VDD, clk, G1, G2, G3, G4, G5,OUT1, OUT2, OUT3, OUT4, OUT5, error ); / m T" W8 T5 g0 x0 B( E" D
input GND, VDD, clk, G1, G2, G3, G4, G5; 3 @* @, A# S; t$ s! v- w. r* {! C
output OUT1, OUT2, OUT3, OUT4, OUT5, error;& J; C5 j# w. a
wire clk1, clk2, clk3 ;9 W; {) L. e1 T0 K8 C# g' W8 |5 K. ?
.
& N% J2 _1 B. U' c* R5 H+ ~.
5 b' \0 W% L" l/ f$ yclk_generator clk_generator ( .clk(clk), .clk1(clk1), .clk2(clk2), .clk3(clk3) );
6 f- S4 b8 ^! K7 W) z; ~.
: [) O6 q" u: _0 E7 f.
/ v8 b+ l" R; Xend module
: ]6 {- X4 c* F2 E
( @$ G& ?( a! H1 Mdesign vision 指令 clk部分描述如下
) ?1 b# `9 C8 Q9 C0 q
# V' b" Z) ^* X8 w7 `current_design $active_design + Z0 ^8 d, s# u; D% g) M, {: o( N
create_clock [get_ports clk] -period 4 -waveform {0 2}# s, F8 ^3 j: M
set_clock_uncertainty 0.3 [get_ports clk]: ~1 x' ^4 `4 t7 M8 Y( K @
set_clock_transition 0.3 [get_ports clk]
# D8 Q1 F' k. N% z& n" Oset_fix_hold [get_clocks clk]
8 C7 k) _8 Z/ b/ E( Vset_dont_touch_network [all_clocks]0 f" }$ E6 p* i1 V
set_drive [drive_of "CCU90mt1_05V_FBB_0909/INVd1/zn"] [get_ports clk]
" S$ g) _$ V+ `) `5 screate_generated_clock -name clk1 -source clk -divide_by 1 [get_pins clk_generator/clk1]
& D" I9 k4 Y% L/ U5 Wset_clock_latency 0.375 [get_pins clk_generator/clk1]! ?3 O" D) K) O* Y# E
create_generated_clock -name clk2 -source clk -divide_by 1 [get_pins clk_generator/clk2]7 `2 H: z/ n$ s$ k; R
set_clock_latency 0.75 [get_pins clk_generator/clk2]
- ?# F4 n& e0 {* o+ [( t2 `create_generated_clock -name clk3 -source clk -divide_by 1 [get_pins clk_generator/clk3]- C2 n1 H" F5 v3 a8 w/ [
set_clock_latency 1.125 [get_pins clk_generator/clk3]! v, h2 C2 Z/ \6 E+ E7 t
- T# }: [& K" G) {- o
結果我的clk tree只有最原始的clk
7 T4 \! [# ~' h: k: [clk1 clk2 clk3 都沒長出來
- h: }) W( s2 l( ^: F$ A+ S; Q4 n不知是那裡用錯了或遺漏了 & B1 |( V9 w c9 |6 t7 z
或是encounter clk沒設定好: B! q! q3 R3 o; ]& c% Q
用了很久都用不好
# L! K u6 o9 j4 e只好請教各位
" _% L9 F$ A* p5 u( Q4 {) y萬分感謝 |
|