在之前的文章中,我們討論了使用 Verilog語言元素對組合電路的描述。本文重點介紹同步時序電路。我們將首先查看同步電路的通用模型,然后以雙向計數器的 Verilog 描述為例進行討論。
在組合電路中,輸出僅取決于輸入的當前值。然而,時序電路的輸出不僅取決于輸入的電流值,還取決于電路的狀態。電路的狀態由輸入的先前值決定。
因此,時序電路具有存儲器,其輸出取決于過去輸入的順序。這些電路使用諸如觸發器 (FF) 之類的存儲器元件來存儲系統的當前狀態。
在處理大型時序電路時,如果我們使用同步方法而不是異步方法,設計問題會變得更容易解決。在同步電路中,所有存儲元件都由相同的時鐘信號觸發。這使我們能夠更好地控制系統,因為在這種情況下,我們知道數據何時將被存儲元件采樣。
由于同步系統的所有存儲元件都連接到同一個時鐘,我們可以對系統進行建模,如圖 1 所示。

?
在此模型中,虛線框代表系統的所有存儲元件(本例中為 D 型 FF)。虛線框外的塊是組合電路。
“下一個狀態邏輯”處理“輸入”和系統的當前狀態,由“state_reg”表示,以確定系統的下一個狀態(“state_next”)。隨著即將到來的時鐘上升沿,“state_next”將存儲在 FF 上。“輸出邏輯”塊也是一個組合電路,它處理“輸入”和“狀態寄存器”以確定系統輸出。
如圖 1 所示,將同步系統與存儲元件和一些組合電路分開有助于我們更容易地找到系統的 HDL 描述。我們只需要描述一些組合電路并將它們連接到存儲元件。而組合電路的 HDL描述在前一篇文章中已經討論過,對于存儲元件,我們通常使用一些眾所周知的 HDL 模板。
我們將查看通用計數器的 Verilog 代碼以闡明這些概念,但在此之前,我們需要查看D 型觸發器(也稱為 DFF)的 HDL 描述。
(有關觸發器雙穩態單比特存儲器設備的更多信息,請查看我們關于將 D 觸發器轉換為 SR、JK 和 T 觸發器的文章。)
通常,可以使用基本邏輯門來實現 DFF。但是,在使用 HDL 在 FPGA 中實現 DFF 時,完全不建議這樣做。安全有效的方法是使用一些眾所周知的 HDL 模板來描述 FF,如下節所述。事實上,綜合工具將此類模板識別為 FF,并使用一些優化的結構來實現它們。
下面的圖 2 顯示了上升沿(圖 2-a)和下降沿(圖 2-b)DFF 的符號。在時鐘邊沿,對 DFF 的輸入 (D) 進行采樣并傳遞到輸出 (Q)。對于上升沿 DFF,采樣沿是時鐘上升沿(圖 2-a),而下降沿 DFF 對時鐘的下降沿敏感。FF 通常具有可用于將系統初始化為已知狀態的重置 (rst)。
?

下面給出了上升沿 DFF 的 Verilog 代碼:
1 module D_FF
2 (
3 input wire clk, reset,
4 input wire d,
5 output reg q
6 );
7 always @(posedge clk, posedge reset)
8 if (reset)
9 q <= 1'b0;
10 else
11 q <= d;
12 endmodule此代碼的第 7 行在“always”塊的敏感度列表中的“clk”和“reset”輸入之前使用了“posedge”關鍵字。“Posedge”代表上升沿,告訴綜合工具“always”模塊應該在“clk”和“reset”信號的上升沿被激活。
請注意,“clk”和“reset”的上升沿都在靈敏度列表中。因此,無論“clk”信號條件如何,“reset”的上升沿都會激活“always”塊。換句話說,這個 DFF 的“重置”是異步的。
第 8 到 11 行使用了我們在上一篇文章中討論過的 Verilog“if”語句。當“always”塊被激活時,“reset”被選中。如果它為邏輯高電平,則 DFF 輸出被復位 (q <= 1'b0)。如果“reset”不是邏輯高電平,那么是“clk”信號經歷了上升沿,DFF 輸出應該得到輸入值(q <= d)。
請注意,我們在推斷觸發器時使用非阻塞賦值 (<=)。正如另一篇文章中所討論的,不正確地使用阻塞 (=) 和非阻塞 (<=) 賦值可能會導致不想要的功能。然而,為了這篇介紹性文章的目的,我們可以簡單地將系統的組合部分與其內存元素分開,并遵循以下兩條準則:
使用阻塞分配來描述組合電路。
使用非阻塞賦值來推斷 FF。
現在,讓我們看一下雙向計數器的 Verilog 代碼,以進一步闡明我們的討論。
我們將為一個雙向計數器編寫代碼,該計數器可以執行下表中列出的四個函數:
?

?
當“加載”輸入被斷言時,輸入數據 (d) 被加載到計數器 (q=d)。當“load”和“en”都為邏輯低時,計數器保持其當前值。對于“load”=0 和“en”=1,計數器可以根據“up_downb”輸入的值向上或向下計數。
八位雙向計數器的 Verilog 代碼如下所示:
1 module bidirect_cnt8
2 (
3 input wire clk, reset,
4 input wire en, load, up_downb,
5 input wire [7:0] d,
6 output reg [7:0] q
7 );
8 reg [7:0] q_next;
9 // The storage elements
10 always @(posedge clk, posedge reset)
11 if (reset)
12 q <= 8'h00;
13 else
14 q <= q_next;
15 //The next state logic
16 always @*
17 if(load)
18 q_next = d;
19 else if (~en)
20 q_next = q;
21 else if (up_downb)
22 q_next = q + 8'h01;
23 else
24 q_next = q - 8'h01;
25 endmodule第 10 到 14 行使用上一節中討論的模板代碼將 8 個 DFF 添加到設計中。這些是上升沿 DFF,具有異步復位。
當“reset”為邏輯高時,值 8'h00 被分配給“q”。術語 8'h00 表示十六進制基數 (8'h) 中的八位數字。這個數字的值由字母“h”后面的兩個十六進制數字給出。因此,當“reset”為邏輯高時,“q”的八位都設置為邏輯低。
當“reset”為邏輯低時,“q_next”被分配給“q”。“q_next”表示圖 1 通用模型中“下一個狀態邏輯”的輸出,并確定在即將到來的時鐘上升沿應分配給“q”的值。
除了描述計數器存儲元件的第 10 到 14 行之外,代碼的其他行描述了組合電路。將存儲元件與組合電路分開不是強制性的,但它可以幫助我們更輕松地描述系統。我們只需要為即將到來的時鐘邊沿確定合適的“q_next”值。第 16 到 24 行實現了這部分設計的組合邏輯,即圖 1 中模型的“Next State Logic”塊。它使用嵌套的“if”語句來描述表 1 的不同功能:
當“load”輸入為邏輯高時,輸入數據(d)被分配給“q_next”。當“load”為邏輯低且計數器未啟用(“en”=0)時,計數器應保持其當前值(“q_next”應等于“q”)。對于“load”=0 和“en”=1,計數器可以根據“up_downb”輸入的值向上或向下計數。
圖 3 顯示了代碼的 ISE 仿真。
?

?
如上所述,我們不必總是將同步系統分成存儲元件和組合電路,如圖 1 所示。但是,我相信這種設計實踐有助于我們在設計數字系統時采用更系統的方法。通過這種方式,我們可以更輕松地將設計的框圖可視化并找到其 HDL 描述。
在本文中,我們首先討論了同步電路的通用模型,其中系統分為兩部分:存儲元件和組合電路。然后,我們用這個模型找到了雙向計數器的 Verilog 描述。這不是描述同步系統的唯一方法;然而,所討論的方法可以簡化設計過程。
?

今天小編帶來了:ISSCC2022套餐,里面有文章、PPT、Tutorial等,同學可以拿回去自己學習研究。


1、深入理解SerDes(Serializer-Deserializer)之一
2、深入理解SerDes(Serializer-Deserializer)之二
3、科普:深入理解SerDes(Serializer-Deserializer)之三
4、資深工程師的ESD設計經驗分享
5、干貨分享,ESD防護方法及設計要點!
6、科普來了,一篇看懂ESD(靜電保護)原理和設計!
7、鎖相環(PLL)基本原理?及常見構建模塊
8、當鎖相環無法鎖定時,該怎么處理的呢?
9、高性能FPGA中的高速SERDES接口
10、什么是毫米波技術?它與其他低頻技術相比有何特點?
11、如何根據數據表規格算出鎖相環(PLL)中的相位噪聲
12、了解模數轉換器(ADC):解密分辨率和采樣率
13、究竟什么是鎖相環(PLL)
14、如何模擬一個鎖相環
15、了解鎖相環(PLL)瞬態響應
16、如何優化鎖相環(PLL)的瞬態響應
17、如何設計和仿真一個優化的鎖相環
18、鎖相環(PLL)?倍頻:瞬態響應和頻率合成
19、了解SAR?ADC
20、了解?Delta-Sigma?ADC
21、什么是數字 IC 設計?
22、什么是模擬 IC 設計?
23、什么是射頻集成電路設計?
24、學習射頻設計:選擇合適的射頻收發器 IC
25、連續時間 Sigma-Delta ADC:“無混疊”ADC
26、了解電壓基準?IC?的噪聲性能
27、數字還是模擬?I和Q的合并和分離應該怎么做?
28、良好通信鏈路性能的要求:IQ 調制和解調
29、如何為系統仿真建模數據轉換器?
30、干貨!CMOS射頻集成電路設計經典講義(Prof. Thomas Lee)
31、使用有效位數 (ENOB) 對 ADC 進行建模
32、以太網供電 (PoE) 的保護建議
33、保護高速接口的設計技巧
34、保護低速接口和電源電路設計技巧
35、使用互調多項式和有效位數對 ADC 進行建模
36、向 ADC 模型和 DAC 建模添加低通濾波器
37、揭秘芯片的內部設計原理和結構
38、Delta-Sigma ADCs中的噪聲簡介(一)
39、Delta-Sigma ADCs中的噪聲簡介(二)
40、Delta-Sigma ADCs 中的噪聲簡介(三)
41、了解Delta-Sigma ADCs 中的有效噪聲帶寬(一)
42、了解Delta-Sigma ADCs 中的有效噪聲帶寬(二)
43、放大器噪聲對 Delta-Sigma ADCs 的影響(一)
44、放大器噪聲對 Delta-Sigma ADCs 的影響(二)
45、參考電壓噪聲如何影響 Delta Sigma ADCs
46、如何在高分辨率Delta-Sigma ADCs電路中降低參考噪聲
47、時鐘信號如何影響精密ADC
48、了解電源噪聲如何影響 Delta-Sigma ADCs
49、運算放大器簡介和特性
50、使用 Delta-Sigma ADCs 降低電源噪聲的影響
51、如何設計帶有運算放大器的精密電流泵
52、鎖定放大器的基本原理
53、了解鎖定放大器的類型和相關的噪聲源
54、用于降低差分 ADC 驅動器諧波失真的 PCB 布局技術
55、干貨!《實用的RFIC技術》課程講義
56、如何在您的下一個 PCB 設計中消除反射噪聲
57、硅谷“八叛徒”與仙童半導體(Fairchild)的故事!
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
1、免費公開課:ISCAS 2015 :The Future of Radios_ Behzad Razavi
2、免費公開課:從 5 微米到 5 納米的模擬 CMOS(Willy Sansen)
3、免費公開課:變革性射頻毫米波電路(Harish Krishnaswamy)
4、免費公開課:ESSCIRC2019-講座-Low-Power SAR ADCs
5、免費公開課:ESSCIRC2019-講座-超低功耗接收器(Ultra-Low-Power Receivers)
6、免費公開課:CICC2019-基于 ADC 的有線收發器(Yohan Frans Xilinx)
7、免費公開課:ESSCIRC 2019-有線與數據轉換器應用中的抖動
8、免費公開課:ISSCC2021 -鎖相環簡介-Behzad Razavi
9、免費公開課:ISSCC2020-DC-DC 轉換器的模擬構建塊
10、免費公開課:ISSCC2020-小數N分頻數字鎖相環設計
11、免費公開課:ISSCC2020-無線收發器電路和架構的基礎知識(從 2G 到 5G)
12、免費公開課:ISSCC2020-從原理到應用的集成變壓器基礎
13、免費公開課:ISSCC2021-射頻和毫米波功率放大器設計的基礎
摩爾學堂(www.moorext.com)--摩爾學堂專注于半導體人才培訓,在線學習服務平臺!