沒有任何寄存器邏輯,RTL設(shè)計(jì)是不完整的。RTL是寄存器傳輸級(jí)或邏輯,用于描述依賴于當(dāng)前輸入和過去輸出的數(shù)字邏輯。
如果所有存儲(chǔ)元件均由相同的源時(shí)鐘信號(hào)觸發(fā),則稱該設(shè)計(jì)為同步設(shè)計(jì)。同步設(shè)計(jì)的優(yōu)點(diǎn)是總體傳播延遲等于觸發(fā)器或存儲(chǔ)元件的傳播延遲。STA對(duì)于同步邏輯分析非常容易,甚至可以通過使用流水線來提高性能。大多數(shù)ASIC/FPGA實(shí)現(xiàn)都使用同步邏輯。本節(jié)介紹同步計(jì)數(shù)器的設(shè)計(jì)。
四位二進(jìn)制計(jì)數(shù)器用于從“0000”到“1111”進(jìn)行計(jì)數(shù),四位BCD計(jì)數(shù)器用于從“0000”到“1001”進(jìn)行計(jì)數(shù)。圖5.14顯示了四位二進(jìn)制計(jì)數(shù)器,其中每個(gè)階段被兩計(jì)數(shù)器分割。
圖5.14四位二進(jìn)制計(jì)數(shù)器
如圖5.14所示。計(jì)數(shù)器有四條輸出線“QA、QB、QC、QD”,其中“QA”是LSB,“QD”是MSB?!癚A”處的輸出在每個(gè)時(shí)鐘脈沖上切換,因此除以2?!癚B”處的輸出每兩個(gè)時(shí)鐘周期切換一次,因此可被四整除,“QC”處的輸出每四個(gè)時(shí)鐘周期切換一次,因此輸出被八整除。類似地,“QD”處的輸出每8個(gè)周期切換一次,因此“QD”處的輸出除以輸入時(shí)鐘時(shí)間周期的16。在實(shí)際應(yīng)用中,計(jì)數(shù)器被用作時(shí)鐘分頻器網(wǎng)絡(luò)。在分頻綜合器中使用偶數(shù)計(jì)數(shù)器來產(chǎn)生可變頻率輸出。
三位遞增計(jì)數(shù)器
計(jì)數(shù)器用于在時(shí)鐘的活動(dòng)邊緣上生成預(yù)定義和所需的計(jì)數(shù)序列。在ASIC/FPGA設(shè)計(jì)中,使用可綜合結(jié)構(gòu)為計(jì)數(shù)器編寫有效的RTL代碼是至關(guān)重要的。用Verilog描述了三位向上計(jì)數(shù)器生成可綜合設(shè)計(jì)。計(jì)數(shù)器在時(shí)鐘的正邊緣從“000”計(jì)數(shù)到“111”,在計(jì)數(shù)的下一個(gè)正邊緣環(huán)回到“000”。示例5.7中描述的計(jì)數(shù)器是可預(yù)設(shè)的計(jì)數(shù)器,它具有同步激活的高“l(fā)oad_en”輸入,以對(duì)所需的三位預(yù)設(shè)值進(jìn)行采樣。數(shù)據(jù)輸入為三位,表示為“data_in”。
計(jì)數(shù)器具有有效的低電平異步“reset_n”輸入,當(dāng)其處于低電平時(shí),輸出到“q_out”上的狀態(tài)為“000”。在正常操作期間,“reset_n”處于高電平狀態(tài)。
可綜合輸出如圖5.15所示,具有三位數(shù)據(jù)輸入線“data_in”、有源高電平“l(fā)oad_en”和有源低電平復(fù)位輸入“reset_n”。輸出由“q_out”和“clk”觸發(fā)的正邊緣時(shí)鐘指示。
示例5.7三位遞增計(jì)數(shù)器的Verilog RTL
圖5.15三位遞增計(jì)數(shù)器綜合頂層圖
三位遞減計(jì)數(shù)器Three-Bit Down Counter
用Verilog描述了三位遞減計(jì)數(shù)器的產(chǎn)生和綜合設(shè)計(jì)。計(jì)數(shù)器從“111”計(jì)數(shù)到“000”,在時(shí)鐘的正邊緣觸發(fā),并在達(dá)到計(jì)數(shù)值“000”后在計(jì)數(shù)的下一個(gè)正邊緣環(huán)回到“111”。三位遞減計(jì)數(shù)器的時(shí)序如圖5.16所示。
示例5.9中描述的計(jì)數(shù)器是可預(yù)設(shè)計(jì)數(shù)器,它具有同步激活的高“l(fā)oad_en”輸入,用于采樣三位所需的可預(yù)設(shè)值。數(shù)據(jù)輸入為三位,表示為“data_in”。
圖5.16三位二進(jìn)制遞減計(jì)數(shù)器的時(shí)序
示例5.8三位遞減計(jì)數(shù)器的Verilog RTL
圖5.17綜合三位遞減計(jì)數(shù)器頂層圖
計(jì)數(shù)器具有低電平異步“reset_n”輸入,當(dāng)其處于低電平時(shí),輸出“q_out”上的狀態(tài)為“000”。在正常操作期間,“reset_n”處于高電平狀態(tài)。
可綜合輸出如圖5.17所示,具有三位數(shù)據(jù)輸入線“data_in”、有源高電平“l(fā)oad_en”和有源低電平復(fù)位輸入“reset_n”。輸出由“q_out”和“clk”觸發(fā)的正邊緣時(shí)鐘指示。
三位增、減計(jì)數(shù)器
用Verilog描述了三位增、減計(jì)數(shù)器產(chǎn)生的可綜合時(shí)序設(shè)計(jì)。遞減計(jì)數(shù)器計(jì)數(shù)從“111”到“000”,在時(shí)鐘的正邊緣觸發(fā),并在達(dá)到計(jì)數(shù)值“000”后,在計(jì)數(shù)的下一個(gè)正邊緣環(huán)回到“111”。遞增計(jì)數(shù)器從“000”計(jì)數(shù)到“111”,在時(shí)鐘的正邊緣觸發(fā),并在達(dá)到計(jì)數(shù)值“000”后在計(jì)數(shù)的下一個(gè)正邊緣環(huán)回到“000”。
圖5.18給出了三位二進(jìn)制增、減計(jì)數(shù)器的內(nèi)部結(jié)構(gòu)。對(duì)于UP/DOWN等于邏輯“1”,計(jì)數(shù)器充當(dāng)遞增計(jì)數(shù)器,對(duì)于UP/DOWN等于“0”,計(jì)數(shù)器充當(dāng)遞減計(jì)數(shù)器。
示例5.9中描述的計(jì)數(shù)器是可預(yù)設(shè)計(jì)數(shù)器,它具有同步激活的高“l(fā)oad_en”輸入,用于采樣三位所需的可預(yù)設(shè)值。數(shù)據(jù)輸入為三位,表示為“data_in”。遞增或遞減計(jì)數(shù)操作由輸入“up_down”選擇,“up_down=1”計(jì)數(shù)器用作向上/遞減計(jì)數(shù)器,“up_down=0”計(jì)數(shù)器用作向下/遞減計(jì)數(shù)器。
計(jì)數(shù)器具有有效的低電平異步“reset_n”輸入,當(dāng)其處于低電平時(shí),輸出“q_out”上的狀態(tài)為“000”。在正常操作期間,“復(fù)位”處于高電平狀態(tài)(示例5.9)。
圖5.18三位遞增、遞減計(jì)數(shù)器
可綜合輸出如圖5.19所示,具有三位數(shù)據(jù)輸入線“data_in”、有源高電平“l(fā)oad_en”和有源低電平復(fù)位輸入“reset_n”。輸出由“q_out”和“clk”觸發(fā)的正邊緣時(shí)鐘指示,選擇行為“up_down”。
示例5.9三位遞增、遞減計(jì)數(shù)器的Verilog RTL
圖5.19三位遞增、遞減計(jì)數(shù)器頂層綜合模塊
格雷碼計(jì)數(shù)器Gray Counters
格雷碼計(jì)數(shù)器用于多時(shí)鐘域設(shè)計(jì)中,因?yàn)闀r(shí)鐘邊沿上只有一位發(fā)生變化。同步器中也會(huì)使用格雷碼。
該示例中描述了格雷碼計(jì)數(shù)器,在該示例中,相對(duì)于計(jì)數(shù)器的先前輸出,活動(dòng)時(shí)鐘邊緣上只有一位發(fā)生變化。在這種情況下,高電平復(fù)位輸入為“rst”。當(dāng)“rst=1”時(shí),計(jì)數(shù)器“out”的輸出賦值給“0000”。
示例5.10中描述的計(jì)數(shù)器是可預(yù)設(shè)計(jì)數(shù)器,它具有同步激活的高“l(fā)oad_en”輸入,用于采樣四位所需的可預(yù)設(shè)值。數(shù)據(jù)輸入為四位,表示為“data_in”。
計(jì)數(shù)器具有激活的高電平異步復(fù)位“rst”輸入,當(dāng)它處于激活的高電平時(shí),輸出行“out”上的狀態(tài)為“0000”。正常運(yùn)行期間,“rst”處于低電平狀態(tài)。
示例5.10四位Gray計(jì)數(shù)器
格雷碼和二進(jìn)制計(jì)數(shù)器
在大多數(shù)實(shí)際應(yīng)用中,需要使用二進(jìn)制和格雷碼計(jì)數(shù)器。通過使用組合邏輯,可以從二進(jìn)制計(jì)數(shù)器輸出生成格雷碼計(jì)數(shù)器。有關(guān)二進(jìn)制到格雷碼和格雷碼到二進(jìn)制代碼轉(zhuǎn)換器,請(qǐng)參閱前面文章。
示例中描述了參數(shù)化二進(jìn)制和格雷碼計(jì)數(shù)器,并描述了Verilog RTL以生成四位二進(jìn)制和格雷碼輸出。對(duì)于“rst_n=0”,二進(jìn)制和格雷碼計(jì)數(shù)器輸出賦值為“0000”。四位格雷碼輸出表示為“gray”(示例5.11)。
四位二進(jìn)制計(jì)數(shù)器的模擬結(jié)果如下面的時(shí)序圖5.20所示,并且對(duì)于時(shí)鐘計(jì)數(shù)器的每個(gè)正邊緣,輸出增量為1。
示例5.11參數(shù)化二進(jìn)制和格雷碼計(jì)數(shù)器的Verilog RTL
圖5.20四位二進(jìn)制計(jì)數(shù)器的時(shí)序
環(huán)形計(jì)數(shù)器Ring Counters
實(shí)際應(yīng)用中使用環(huán)形計(jì)數(shù)器來提供預(yù)定義的延遲。這些計(jì)數(shù)器本質(zhì)上是同步的,以引入一定量的預(yù)定義延遲,并用于實(shí)際應(yīng)用中,如交通燈控制器、定時(shí)器。圖5.21顯示了四位環(huán)形計(jì)數(shù)器使用D觸發(fā)器的內(nèi)部邏輯結(jié)構(gòu),如圖所示,MSB觸發(fā)器的輸出反饋到LSB觸發(fā)器輸入,計(jì)數(shù)器在時(shí)鐘信號(hào)的每個(gè)活動(dòng)邊上移動(dòng)數(shù)據(jù)。
示例5.12中描述了四位環(huán)形計(jì)數(shù)器的Verilog RTL,計(jì)數(shù)器具有“set_in”輸入,以將輸入初始化值設(shè)置為“1000”,并在時(shí)鐘信號(hào)的正邊緣工作。
綜合邏輯如圖5.22所示。
圖5.21環(huán)形計(jì)數(shù)器內(nèi)部結(jié)構(gòu)
示例5.12四位環(huán)形計(jì)數(shù)器的Verilog RTL
圖5.22四位環(huán)形計(jì)數(shù)器的綜合邏輯
約翰遜計(jì)數(shù)器Johnson Counters
約翰遜計(jì)數(shù)器是一種特殊類型的同步計(jì)數(shù)器,采用移位寄存器設(shè)計(jì)。三位約翰遜計(jì)數(shù)器的內(nèi)部結(jié)構(gòu)如圖5.23所示。
四位約翰遜計(jì)數(shù)器的Verilog RTL如例5.13所示。
綜合邏輯如圖5.24所示。
圖5.23三位約翰遜計(jì)數(shù)器
示例5.13四位約翰遜計(jì)數(shù)器的Verilog RTL
圖5.24四位約翰遜計(jì)數(shù)器的綜合邏輯
參數(shù)化計(jì)數(shù)器
在實(shí)際應(yīng)用中,為了提高計(jì)數(shù)器的可讀性和可重用性,通過定義參數(shù)來設(shè)計(jì)計(jì)數(shù)器。參數(shù)整數(shù)值可用于定義計(jì)數(shù)器的位數(shù)。8位參數(shù)化計(jì)數(shù)器的Verilog RTL如圖5.25所示。
參數(shù)化計(jì)數(shù)器的可綜合頂層模塊如圖5.26所示。
圖5.25八位參數(shù)化計(jì)數(shù)器的Verilog RTL
圖5.26參數(shù)化計(jì)數(shù)器的綜合邏輯
審核編輯:郭婷
-
寄存器
+關(guān)注
關(guān)注
31文章
5363瀏覽量
120915 -
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110243 -
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2259瀏覽量
94865
原文標(biāo)題:Verilog時(shí)序邏輯硬件建模設(shè)計(jì)(三)同步計(jì)數(shù)器
文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論