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