前言
時鐘信號在很大程度上決定了整個設(shè)計的性能和可靠性,盡量避免使用FPGA內(nèi)部邏輯產(chǎn)生的時鐘,因為它很容易導(dǎo)致功能或時序出現(xiàn)問題。內(nèi)部邏輯(組合邏輯)產(chǎn)生的時鐘容易出現(xiàn)毛刺,影響設(shè)計的功能實現(xiàn);組合邏輯固有的延時也容易導(dǎo)致時序問題。
一、內(nèi)部邏輯產(chǎn)生的時鐘
若使用組合邏輯的輸出作為時鐘信號或異步復(fù)位信號,設(shè)計者必須對有可能出現(xiàn)的問題采取必要的預(yù)防措施。我們知道,在正常的同步設(shè)計中,一個時鐘一個節(jié)拍的數(shù)據(jù)流控制能夠保證系統(tǒng)持續(xù)穩(wěn)定的工作。但是,組合邏輯產(chǎn)生的時鐘不可避免地會有毛刺出現(xiàn),如果此時輸入端口的數(shù)據(jù)正處于變化過程,那么它將違反建立和保持時間要求,從而影響后續(xù)電路的輸出狀態(tài),甚至導(dǎo)致整個系統(tǒng)運行失敗。
對于必須采用內(nèi)部邏輯作時鐘或者復(fù)位信號的應(yīng)用,也還是有解決辦法的。思路并不復(fù)雜,和異步復(fù)位、同步釋放的原理是一樣的。在輸出時鐘或者復(fù)位信號之前,再用系統(tǒng)專用時鐘信號(通常指外部晶振輸入時鐘或者PLL處理后的時鐘信號)打一拍,從而避免組合邏輯直接輸出,達(dá)到同步處理的效果。對于輸出的時鐘信號或復(fù)位信號,最好讓它走全局時鐘網(wǎng)絡(luò),從而減小時鐘網(wǎng)絡(luò)延時,提升系統(tǒng)時序性能。
內(nèi)部邏輯產(chǎn)生的時鐘處理如下:
二、分頻時鐘與使能時鐘
設(shè)計中往往需要用到主時鐘的若干分頻信號作為時鐘,即分頻時鐘。可別小看這個所謂的分頻時鐘,簡簡單單不加處理的亂用時鐘那就叫時鐘滿天飛,是很不好的設(shè)計風(fēng)格。言歸正傳,如果設(shè)計中確實需要用到系統(tǒng)主時鐘的分頻信號來降低頻率時,該如何處理呢?
對于資源較豐富的FPGA,一般都有內(nèi)嵌的多個PLL或者DLL專門用于時鐘管理,利用它們就可以很容易地達(dá)到多個時鐘的設(shè)計,輸出時鐘能夠配置成設(shè)計者期望的不同頻率和相位差(相對于輸入時鐘),這樣的時鐘分頻是最穩(wěn)定的。但是對于某些無法使用PLL或者DLL資源的器件又該怎么辦呢?推薦使用“使能時鐘”進行設(shè)計,在“使能時鐘”設(shè)計中只使用原有的時鐘,讓分頻信號作為使能信號來用。
下面舉一個實例來說明如何進行使能時鐘的設(shè)計,該設(shè)計需要得到一個50MHz鐘的5分頻信號即10MHz。
input clk; //50MHz時鐘信號 input rst n; reg[2:0]ent; wire en; //使能信號,高電平有效 //5分頻計數(shù)0~4 always@( posedge clk or negedge rst _n)begin if(!rst _n) ent<=3'd0; else if(ent<3'd4) ent<=ent+1b1; else ent<=3'd0; end assign en=(cnt==3'd4);//每5個時鐘周期產(chǎn)生1個時鐘周期高脈沖 //使用使能時鐘 always@( posedge clk or negedge rst _n)begin if(!rst _n)…; else if(en)…; ... end
如下圖所示,使能信號不直接作為時鐘使用,而是作為數(shù)據(jù)輸入端的選擇信號,這避免了使用分頻時鐘。
三、門控時鐘
組合邏輯中多用門控時鐘,一般驅(qū)動門控時鐘的邏輯都是只包含一個與門(或門).如其他的附加邏輯,容易因競爭產(chǎn)生不希望的毛刺。如圖a所示,門控時鐘通過一個使號控制時鐘的開或者關(guān)。當(dāng)系統(tǒng)不工作時可以關(guān)閉時鐘,整個系統(tǒng)就處于非激活狀態(tài),這種夠在某種程度上降低系統(tǒng)功耗。
圖a:門控時鐘
然而,使用門控時鐘并不符合同步設(shè)計的思想,它可能會影響系統(tǒng)設(shè)計的實現(xiàn)和驗證。單純從功能實現(xiàn)來看,使用使能時鐘替代門控時鐘是一個不錯的選擇;但是使能時鐘在使能信號關(guān)閉時,時鐘信號仍然在工作,它無法像門控時鐘那樣降低系統(tǒng)功耗。
是否有一種設(shè)計方法既可以降低系統(tǒng)功耗,又能夠穩(wěn)定可靠的替代門控時鐘呢?Altera就提出了一種解決方案,且待我慢慢道來。如圖b所示,對于上升沿有效的系統(tǒng)時鐘cì k,它的下降沿先把門控信號(gating signal)打一拍,然后再用這個使能信號(enable)和系統(tǒng)時鐘(clk)相與后作為后續(xù)電路的門控時鐘。
圖b:推薦的門控時鐘
這樣的門控時鐘電路很好地解決了組合邏輯常見的一些問題。它避免了毛刺的出現(xiàn),同時也有效抑制了亞穩(wěn)態(tài)可能帶來的危害。但是從另一個方面來說,如果這個設(shè)計的系統(tǒng)時鐘(clk)占空比不是很穩(wěn)定,或者輸出的使能信號(enable)與時鐘信號(clk)的邏輯過于復(fù)雜(不止這個例子中一個與門那么簡單),那么它也會帶來一些功能或時序上的問題。總的來說,只要設(shè)計者控制好這個設(shè)計中時鐘的占空比和門控邏輯復(fù)雜度,它還是比圖a給出的門控時鐘方案更可行。
審核編輯:湯梓紅
-
FPGA
+關(guān)注
關(guān)注
1643文章
21957瀏覽量
614037 -
pll
+關(guān)注
關(guān)注
6文章
881瀏覽量
136041 -
時鐘信號
+關(guān)注
關(guān)注
4文章
465瀏覽量
29074
原文標(biāo)題:【FPGA技巧篇】時鐘設(shè)計技巧
文章出處:【微信號:ZYNQ,微信公眾號:ZYNQ】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
時鐘樹優(yōu)化與有用時鐘延遲

多時鐘設(shè)計中時鐘切換電路設(shè)計案例


門控時鐘與時鐘偏移研究

什么是時鐘周期_時鐘周期怎么算
STM32時鐘系統(tǒng)時鐘樹和時鐘配置函數(shù)介紹及系統(tǒng)時鐘設(shè)置步驟資料

什么是時鐘呢 時鐘信號的關(guān)鍵指標(biāo)

stm32內(nèi)部時鐘有哪些時鐘源 stm32使用內(nèi)部時鐘配置教程
什么是門控時鐘 門控時鐘降低功耗的原理

verilog的時鐘分頻與時鐘使能
什么是時鐘偏斜?了解時鐘分配網(wǎng)絡(luò)中的時鐘偏斜

評論