一、同步設(shè)計(jì)
1.1 時(shí)鐘的同步設(shè)計(jì)
關(guān)注問題:
(1)設(shè)計(jì)中盡可能使用單時(shí)鐘和單時(shí)鐘邊沿觸發(fā)
(2)不要使用例如“與”“或”門這些基本單元來生成RS鎖存或者FF
(3)不要在組合邏輯中引入反饋電路
在HDL設(shè)計(jì)中使用同步設(shè)計(jì)思想以及邏輯綜合工具。使用異步時(shí)鐘會(huì)讓更加精確的時(shí)序約束變得困難,因此,盡可能利用單個(gè)時(shí)鐘和單邊沿。(使用單個(gè)時(shí)鐘在多數(shù)設(shè)計(jì)中很難實(shí)現(xiàn),在設(shè)計(jì)中盡量減少時(shí)鐘數(shù)量以減輕分析的復(fù)雜度)
盡管可以使用基本門來實(shí)現(xiàn)RS或FF,但時(shí)序分析工具會(huì)把它視作對(duì)組合電路的反饋,如果無法避免,則需要使用set_disable_timing設(shè)置來避免時(shí)序分析期間反饋環(huán)路的影響。
避免在內(nèi)部電路生成異步時(shí)鐘,如果需要生成這樣的時(shí)鐘,那么推薦在生成時(shí)鐘的FF輸出端使用create_clock來指定時(shí)鐘。
避免反饋跨越異步復(fù)位,同樣的,避免使用門控時(shí)鐘和門控復(fù)位。
二、 復(fù)位問題
2.1 使用異步復(fù)位作為初始的復(fù)位
關(guān)注問題:
(1)使用同步復(fù)位電路可能會(huì)導(dǎo)致綜合器生成無法正確復(fù)位的電路,同時(shí),同步復(fù)位會(huì)在數(shù)據(jù)路徑引入復(fù)位信號(hào)(延遲讓時(shí)序變得困難),在多時(shí)鐘系統(tǒng)中可能需要計(jì)數(shù)器來保證復(fù)位信號(hào)寬度。但同步復(fù)位并不是完全沒有優(yōu)點(diǎn),比如,保證系統(tǒng)是完全同步的,可以濾除掉復(fù)位信號(hào)的一些小毛刺,同步復(fù)位需要更少的觸發(fā)器等等,這些問題整理詳細(xì)文章討論。
(2)使用異步復(fù)位對(duì)寄存器進(jìn)行初始的復(fù)位會(huì)更加安全
(3)除了復(fù)位功能外,復(fù)位/置位的引腳不要用作它途
(4)在同一個(gè)復(fù)位線路上禁止同時(shí)使用同步復(fù)位和異步復(fù)位
(5)一個(gè)FF盡量不使用異步復(fù)位和異步置位
異步復(fù)位示例:
always結(jié)構(gòu)僅會(huì)由時(shí)鐘上升沿以及低有效的復(fù)位信號(hào)觸發(fā)
always @(posedge CLK or negedge RST_X) if (!RST_X) Q 《= 1‘b0; else Q 《= DATA;
請(qǐng)注意上面表述的是初始復(fù)位(Initial reset)推薦使用異步復(fù)位。異步復(fù)位的時(shí)序分析比較困難,因?yàn)闀r(shí)序路徑會(huì)被切斷,從而沒有考慮到B的復(fù)位輸入到寄存器B的輸出Q的時(shí)序。同時(shí),A的輸出到B異步復(fù)位的的時(shí)序也不會(huì)被分析。
2.2 復(fù)位問題
注意問題:
(1)不要在復(fù)位路徑引入邏輯電路
例:
reg[4:0] count; wire REN_X,EN_X,count32_x,ctl_x; assign count32_x = ~(& count) | ctl_x; assign REN_X = EN_X | count32_x; always @( posedge CLK or negedge REN_X ) if(REN_X == 1’b0) Q 《= 1‘b0; else Q 《= D;
當(dāng)組合邏輯產(chǎn)生復(fù)位信號(hào)時(shí),由于優(yōu)化的原因,使能信號(hào)可能會(huì)和FF分離,并且不排除危險(xiǎn)信號(hào)驅(qū)動(dòng)復(fù)位信號(hào)的可能性(FF可能會(huì)以意外的時(shí)序復(fù)位)。如上圖所示,即使在RTL描述中的FF復(fù)位信號(hào)前插入了使能邏輯,也可能會(huì)發(fā)生這種情況。并且一旦發(fā)生這種問題,很難排查。總而言之,設(shè)計(jì)電路不要總依賴綜合工具的優(yōu)化。
2.2.1 噪聲,毛刺
復(fù)位信號(hào)不排除會(huì)被噪聲干擾,產(chǎn)生一些毛刺,因此,推薦使用濾波,但引入濾波也不是必須的,視情況而定。下圖是高有效復(fù)位的濾波電路
如果是低有效復(fù)位?
濾波波形原理:
2.2.2 亞穩(wěn)態(tài)問題
以低有效異步復(fù)位為例,如果復(fù)位信號(hào)在時(shí)鐘沿釋放(或附近),不滿足Recovery Time以及Removal Time,會(huì)出現(xiàn)亞穩(wěn)態(tài),所謂復(fù)位恢復(fù)時(shí)間就是,復(fù)位釋放的時(shí)間距離時(shí)鐘沿(上升沿)的時(shí)間,復(fù)位移除時(shí)間就是,復(fù)位釋放的時(shí)間距離時(shí)鐘沿(上升沿)的時(shí)間。和數(shù)據(jù)建立時(shí)間保持時(shí)間一樣,都要滿足一定的時(shí)序要求。這是需要關(guān)注的問題。
2.2.3 同步器/異步復(fù)位同步釋放
module async_resetFFstyle2 ( output reg rst_n, input clk, asyncrst_n); reg rff1; always @(posedge clk or negedge asyncrst_n) if (!asyncrst_n) {rst_n,rff1} 《= 2’b0; else {rst_n,rff1} 《= {rff1,1‘b1}; endmodule
外部的復(fù)位信號(hào)進(jìn)入推薦使用異步復(fù)位同步釋放,下面是代碼綜合出的電路圖,這種設(shè)計(jì)有它的優(yōu)勢(shì)。
編輯:jq
-
RS
+關(guān)注
關(guān)注
3文章
140瀏覽量
110313 -
代碼
+關(guān)注
關(guān)注
30文章
4868瀏覽量
69896 -
同步器
+關(guān)注
關(guān)注
1文章
103瀏覽量
14935 -
綜合器
+關(guān)注
關(guān)注
0文章
11瀏覽量
6535
原文標(biāo)題:RTL設(shè)計(jì)風(fēng)格及Verilog編碼規(guī)范(一)
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
淺談Verilog和VHDL的區(qū)別

Verilog 與 ASIC 設(shè)計(jì)的關(guān)系 Verilog 代碼優(yōu)化技巧
Verilog 測(cè)試平臺(tái)設(shè)計(jì)方法 Verilog FPGA開發(fā)指南
Verilog與VHDL的比較 Verilog HDL編程技巧
ADS1281 PCM編碼規(guī)范應(yīng)該在哪里找?
Verilog硬件描述語言參考手冊(cè)
寫 Verilog 如何做到心中有電路?
怎么樣提高verilog代碼編寫水平?
FPGA Verilog HDL有什么奇技巧?
C語言編碼規(guī)范,這才是最理想的!

評(píng)論