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





