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