FPGA設(shè)計一個很重要的設(shè)計是時序設(shè)計,而時序設(shè)計的實質(zhì)就是滿足每一個觸發(fā)器的建立(Setup)/保持(Hold)時間的要求。
建立時間(Setup Time):是指在觸發(fā)器的時鐘信號上升沿到來以前,數(shù)據(jù)穩(wěn)定不變的時間,如果建立時間不夠,數(shù)據(jù)將不能在這個時鐘上升沿被打入觸發(fā)器;
保持時間(Hold Time):是指在觸發(fā)器的時鐘信號上升沿到來以后,數(shù)據(jù)穩(wěn)定不變的時間, 如果保持時間不夠,數(shù)據(jù)同樣不能被打入觸發(fā)器。
FPGA設(shè)計分為同步電路設(shè)計和同步電路設(shè)計,然而很多異步電路設(shè)計都可以轉(zhuǎn)化為同步電路設(shè)計,在設(shè)計時盡量采用同步電路進(jìn)行設(shè)計。對于同步電路可以轉(zhuǎn)化的邏輯必須轉(zhuǎn)化,不能轉(zhuǎn)化的邏輯,應(yīng)將異步的部分減到最小,而其前后級仍然應(yīng)該采用同步設(shè)計。
為了讓同步電路可靠地運行,就要對時鐘偏差進(jìn)行控制,以使時鐘偏差減小到可用的范圍。影響時鐘偏差的主要有以下幾個因素:
用于連接時鐘樹的連線
鐘樹的拓?fù)浣Y(jié)構(gòu)
時鐘的驅(qū)動
時鐘線的負(fù)載
時鐘的上升及下降時間
在通常的FPGA設(shè)計中對時鐘偏差的控制主要有以下幾種方法:
控制時鐘信號盡量走可編程器件的的全局時鐘網(wǎng)絡(luò)。在可編程器件中一般都有專門的時鐘驅(qū)動器及全局時鐘網(wǎng)絡(luò),不同種類、型號的可編程器件,它們中的全局時鐘網(wǎng)絡(luò)數(shù)量不同,因此要根據(jù)不同的設(shè)計需要選擇含有合適數(shù)量全局時鐘網(wǎng)絡(luò)的可編程器件。一般來說,走全局時鐘網(wǎng)絡(luò)的時鐘信號到各使用端的延時小,時鐘偏差很小,基本可以忽略不計。
若設(shè)計中時鐘信號數(shù)量很多,無法讓所有的信號都走全局時鐘網(wǎng)絡(luò),那么可以通過在設(shè)計中加約束的方法,控制不能走全局時鐘網(wǎng)絡(luò)的時鐘信號的時鐘偏差。
異步接口時序裕度要足夠大。局部同步電路之間接口都可以看成是異步接口,比較典型的是設(shè)計中的高低頻電路接口、I/O接口,那么接口電路中后一級觸發(fā)器的建立-保持時間要滿足要求,時序裕度要足夠大。
在系統(tǒng)時鐘大于30MHz時,設(shè)計難度有所加大,建議采用流水線等設(shè)計方法。采用流水線處理方式可以達(dá)到提高時序電路的速度,但使用的器件資源也成倍增加。
要保證電路設(shè)計的理論最高工作頻率大于電路的實際工作頻率。