非常開心自己的微信公眾號:
《數字集成電路設計及EDA教程》
關注者超過了1700
里面主要講解數字IC前端、后端、DFT、低功耗設計以及驗證等相關知識,並且講解了其中用到的各種EDA工具的教程。
為了紀念,同時考慮到微信公眾平台上面發布的很多推文百度搜索不到,所以以后的推文也會在這里進行轉載。
一文、一曲、一圖
文:
《童話里的生日祝福》
微風躲在霞草里舞蹈
提醒我你的生日快到
玫瑰刺拽着襯衫衣角
你的禮物我怎么會忘掉
綿雲像麥芽糖被陽光發酵
是你也想了解的味道
我站在山坡上踮起腳
只有這個角度剛剛好
想象里摘一朵送給你要不要
下過雨的天怎么更吸引小鳥
關於這個問題我一直在思考
原來是塗了彩虹顏色的唇膏
於是我悄悄偷一點放在你的化裝盒
想你也一定喜歡得不得了
庄園里剛結出的花苞
九百九十九朵不多也不少
讓我用勤勞培育給你的祈禱
瞧
那一株花蕊輕盈像你的睫毛
那一朵欲放未放是你羞澀而溫暖的笑
風車緩緩地繞陪着牛兒吃草
夕陽懶懶地照在等黎明破曉
你倔起嘴巴在撒嬌
又溜走一歲這時光飛逝的年少
風箏飛呀飛系着願望在飄
秋千搖呀搖我累得快睡着
想起這首旋律古老的歌謠
化身田園詩人為你唱:
祝你生日快樂
祝你生日快樂
祝你生日快樂
祝你生日快樂
曲:
暫時不知道怎么弄
圖:
時序約束是邏輯綜合以及布局布線中一個非常重要的環節,如果設計中時鍾非常多,那么時序約束將非常復雜,下面給出一個經典案例來給出多時鍾且時鍾經過兩級MUX的時序約束問題的最佳解決方案。
關於過兩級mux的時序約束的添加
參考鏈接:http://bbs.eetop.cn/thread-458928-1-1.html
如上圖,分頻器都是寄存器做的,mux是用組合邏輯實現的,時序圖列出了clkx與clkz之間4分頻時的數據采集關系。
問:本電路完整的時序約束SDC文件,尤其是clkx和clkz之間應該如何約束?
答:
set_app_var timing_enable_multiple_clocks_per_reg true
create_generated_clock -divide_by 1 -name clkx_div1 -source [get_ports clkx] [get_pins freq_divA/clkx_div1]
create_generated_clock -divide_by 2 -name clkx_div2 -source [get_ports clkx] [get_pins freq_divA/clkx_div2]
create_generated_clock -divide_by 3 -name clkx_div3 -source [get_ports clkx] [get_pins freq_divA/clkx_div3]
create_generated_clock -divide_by 4 -name clkx_div4 -source [get_ports clkx] [get_pins freq_divA/clkx_div4]
set_clock_group -logically_exclusive -group clkx_div1 -group clkx_div2 -group clkx_div3 -group clkx_div4
create_generated_clock -divide_by 1 -name clky_1 -source [get_pins freq_divA/clkx_div1] [get_pins MUX1/clky]
create_generated_clock -divide_by 1 -name clky_2 -source [get_pins freq_divA/clkx_div2] [get_pins MUX1/clky] -add
create_generated_clock -divide_by 1 -name clky_3 -source [get_pins freq_divA/clkx_div3] [get_pins MUX1/clky] -add
create_generated_clock -divide_by 1 -name clky_4 -source [get_pins freq_divA/clkx_div4] [get_pins MUX1/clky] -add
set_clock_group -physically_exclusive -group clky_1 -group clky_2 -group clky_3 -group clky_4
create_generated_clock -divide_by 1 -name clky_div1 -source [get_pins MUX1/clky] [get_pins freq_divB/clky_div1]
create_generated_clock -divide_by 2 -name clky_div2 -source [get_pins MUX1/clky] [get_pins freq_divB/clky_div2]
create_generated_clock -divide_by 4 -name clky_div4 -source [get_pins MUX1/clky] [get_pins freq_divB/clky_div4]
create_generated_clock -divide_by 8 -name clky_div8 -source [get_pins MUX1/clky] [get_pins freq_divB/clky_div8]
set_clock_group -logically_exclusive -group clky_div1 -group clky_div2 -group clky_div4 -group clky_div8
create_generated_clock -divide_by 1 -name clkz_1 -source [get_pins freq_divB/clky_div1] [get_pins MUX2/clkz]
create_generated_clock -divide_by 1 -name clkz_2 -source [get_pins freq_divB/clky_div2] [get_pins MUX2/clkz] -add
create_generated_clock -divide_by 1 -name clkz_4 -source [get_pins freq_divB/clky_div4] [get_pins MUX2/clkz] -add
create_generated_clock -divide_by 1 -name clkz_8 -source [get_pins freq_divB/clky_div8] [get_pins MUX2/clkz] -add
set_clock_group -physically_exclusive -group clkz_1 -group clkz_2 -group clkz_4 -group clkz_8
之后再繼續設定各個generated clokc的uncertainty、network latency和transition:set_clock_transition和set_clock_uncertainty
以及set_clock_latency -network 。。。,需要寫的命令是多一些。但還是比用set_false_path命令好,DC會分析4*4=16條時序路徑,
因此你需要些32句set_false_path命令,而用set_clock_group,只需要4句命令。
由你的圖中,可知clkx_div?四個生成時鍾是邏輯上互斥的,物理上不互斥,這樣就不會分析它們之間的時序關系,但會分析它們之間的信號
完整性(PT SI),而引腳clky之后作用在launchregister的時鍾之間既是邏輯互斥也是物理互斥。同樣可以分析第二個分頻器和mux的原理。
當然也可以采用如下寫法:
create_generated_clock -divide_by 1 -name clky_1 -source [get_ports clkx] [get_pins MUX1/clky]
create_generated_clock -divide_by 2 -name clky_2 -source [get_ports clkx] [get_pins MUX1/clky] -add
create_generated_clock -divide_by 3 -name clky_3 -source [get_ports clkx] [get_pins MUX1/clky] -add
create_generated_clock -divide_by 4 -name clky_4 -source [get_ports clkx] [get_pins MUX1/clky] -add
set_clock_group -physically_exclusive -group clky_1 -group clky_2 -group clky_3 -group clky_4
create_generated_clock -divide_by 1 -name clkz_1 -source [get_pins MUX1/clky] [get_pins MUX2/clkz]
create_generated_clock -divide_by 2 -name clkz_2 -source [get_pins MUX1/clky] [get_pins MUX2/clkz] -add
create_generated_clock -divide_by 4 -name clkz_4 -source [get_pins MUX1/clky] [get_pins MUX2/clkz] -add
create_generated_clock -divide_by 8 -name clkz_8 -source [get_pins MUX1/clky] [get_pins MUX2/clkz] -add
set_clock_group -physically_exclusive -group clkz_1 -group clkz_2 -group clkz_4 -group clkz_8
同樣設置各個generated clokc的network latency、uncertainty和transition。
問:那DC還會分析clkx 和 clky_div1/clky_div2/clky_div4/clky_div8 之間,以及clkx_div? 與clky_div? 之間的時序關系嗎?
答:用set_clock_groups -logicall_exclusive 很方便,只要你不設false path(包括case analaysis,clock groups),dc都會分析
注:物理互斥表示兩個時鍾不會同時存在,最好用於一個引腳上可能輸入幾種不同的時鍾頻率。邏輯互斥表示兩個時鍾可以同時存在,但最終只有一個時鍾有效,一般用於MUX的輸出時鍾。
如果喜歡也請多多分享喲,謝謝您的關注