本文介紹了 VHDL,一種硬件描述語(yǔ)言,以及它在描述數(shù)字電路時(shí)的結(jié)構(gòu)。我們還將回顧一些介紹性示例電路描述,并觸及“std_logic”和“bit”數(shù)據(jù)類型之間的區(qū)別。
VHDL是數(shù)字電路設(shè)計(jì)中常用的硬件描述語(yǔ)言(HDL)之一。VHDL 代表 VHSIC 硬件描述語(yǔ)言。反過(guò)來(lái),VHSIC 代表超高速集成電路。
VHDL 于 1981 年左右由美國(guó)國(guó)防部發(fā)起,在 IBM 和德州儀器等公司的合作下,1985 年發(fā)布了 VHDL 的第一個(gè)版本。1984 年發(fā)明了第一塊 FPGA 的賽靈思很快在其產(chǎn)品中支持了 VHDL。從那時(shí)起,VHDL 已經(jīng)發(fā)展成為數(shù)字電路設(shè)計(jì)、仿真和綜合方面的成熟語(yǔ)言。
在本文中,我們將簡(jiǎn)要討論 VHDL 代碼在描述給定電路時(shí)的一般結(jié)構(gòu)。我們也會(huì)通過(guò)一些介紹性的例子來(lái)熟悉一些常用的數(shù)據(jù)類型、運(yùn)算符等。
讓我們考慮一個(gè)簡(jiǎn)單的數(shù)字電路,如圖 1 所示。

此圖顯示有兩個(gè)輸入端口 a 和 b,以及一個(gè)輸出端口 out1。該圖表明輸入和輸出端口是一位寬。該電路的功能是對(duì)兩個(gè)輸入進(jìn)行“與”運(yùn)算并將結(jié)果放在輸出端口上。
VHDL 使用類似的描述;但是,它有自己的語(yǔ)法。例如,它使用以下代碼行來(lái)描述該電路的輸入和輸出端口:
1 entity circuit_1 is
2 Port ( a : in STD_LOGIC;
3 b : in STD_LOGIC;
4 out1 : out STD_LOGIC);
5 end circuit_1;讓我們逐行分解這意味著什么。
第 1 行:代碼的第一行指定要描述的電路的任意名稱。位于關(guān)鍵字“entity”和“is”之間的單詞“circuit_1”決定了該模塊的名稱。
第 2 到 4 行:這些行指定電路的輸入和輸出端口。將這些線路與圖 1 的電路進(jìn)行比較,我們看到電路的端口及其特性列在關(guān)鍵字“端口”之后。例如,第 3 行說(shuō)我們有一個(gè)名為“b”的端口。該端口是一個(gè)輸入,如冒號(hào)后的關(guān)鍵字“in”所示。
關(guān)鍵字“std_logic”指定了什么?正如我們將在本文后面討論的那樣,std_logic 是 VHDL 中常用的數(shù)據(jù)類型。它可以用來(lái)描述一位數(shù)字信號(hào)。由于圖 1 中的所有輸入/輸出端口都將傳輸 1 或 0,因此我們可以對(duì)這些端口使用 std_logic 數(shù)據(jù)類型。
第 5 行:此行確定“實(shí)體”語(yǔ)句的結(jié)束。
因此,代碼的實(shí)體部分指定了 1) 要描述的電路的名稱和 2) 電路的端口及其特性,即輸入/輸出和這些端口要傳輸?shù)臄?shù)據(jù)類型。代碼的實(shí)體部分實(shí)際上描述了模塊與其周圍環(huán)境的接口。由討論的“實(shí)體”語(yǔ)句指定的上述電路的特征在圖 1 中以綠色顯示。
除了電路與其環(huán)境的接口之外,我們還需要描述電路的功能。在圖 1 中,電路的功能是對(duì)兩個(gè)輸入進(jìn)行“與”運(yùn)算并將結(jié)果放在輸出端口上。為了描述電路的操作,VHDL 添加了“架構(gòu)”部分并將其與實(shí)體語(yǔ)句定義的電路_1 相關(guān)聯(lián)。描述該電路架構(gòu)的 VHDL 代碼將是
6 architecture Behavioral of circuit_1 is
8 begin
9 out1 <= ( a and b );
10 end Behavioral;
第 6 行:此行為將在下一行中描述的架構(gòu)命名為“行為”。該名稱位于關(guān)鍵字“architecture”和“of”之間。它還將這種架構(gòu)與“電路_1”相關(guān)聯(lián)。換言之,該架構(gòu)將描述“電路_1”的操作。
第 8 行:?這指定了架構(gòu)描述的開始。
第 9行 第 9 行使用 VHDL 的語(yǔ)法來(lái)描述電路的操作。兩個(gè)輸入 a 和 b 的 AND 在括號(hào)內(nèi),結(jié)果使用賦值運(yùn)算符“<=”賦值給輸出端口。
第 10 行?這指定了架構(gòu)描述的結(jié)尾。如上所述,這些代碼行描述了電路的內(nèi)部操作,這里是一個(gè)簡(jiǎn)單的與門(在圖 1 中以藍(lán)色顯示)。
將我們到目前為止討論的內(nèi)容放在一起,我們幾乎完成了用 VHDL 描述“Circuit_1”。我們得到以下代碼:
1 entity circuit_1 is
2 Port ( a : in STD_LOGIC;
3 b : in STD_LOGIC;
4 out1 : out STD_LOGIC);
5 end circuit_1;
-----------------------------------------------------
6 architecture Behavioral of circuit_1 is
8 begin
9 out1 <= ( a and b );
10 end Behavioral;但是,我們?nèi)匀恍枰砑訋仔写a。這些行將添加一個(gè)包含一些重要定義的庫(kù),包括數(shù)據(jù)類型和運(yùn)算符的定義。一個(gè)庫(kù)可能由多個(gè)包組成(參見下面的圖 2)。我們必須使給定庫(kù)的所需包對(duì)設(shè)計(jì)可見。
由于上述示例使用數(shù)據(jù)類型“std_logic”,我們需要將“ieee”庫(kù)中的“std_logic_1164”包添加到代碼中。請(qǐng)注意,std_logic 數(shù)據(jù)類型的邏輯運(yùn)算符也在“std_logic_1164”包中定義——否則我們必須使相應(yīng)的包對(duì)代碼可見。最終代碼將是
1 library ieee;
2 use ieee.std_logic_1164.all
3 entity circuit_1 is
4 Port ( a : in STD_LOGIC;
5 b : in STD_LOGIC;
6 out1 : out STD_LOGIC);
7 end circuit_1;
-----------------------------------------------------
8 architecture Behavioral of circuit_1 is
9 begin
10 out1 <= ( a and b );
11 end Behavioral;在這里,我們創(chuàng)建兩條新線以超越我們已經(jīng)創(chuàng)建的內(nèi)容。第一行添加庫(kù)“ieee”,第二行指定需要此庫(kù)中的包“std_logic_1164”。由于“std_logic”是一種常用的數(shù)據(jù)類型,我們幾乎總是需要將“ieee”庫(kù)和“std_logic_1164”包添加到VHDL代碼中。

我們可以使用 Xilinx ISE 仿真器來(lái)驗(yàn)證上述 VHDL 代碼的運(yùn)行情況。
現(xiàn)在我們熟悉了 VHDL 代碼中的基本單元,讓我們回顧一下最重要的 VHDL 數(shù)據(jù)類型之一,即“std_logic”數(shù)據(jù)類型。
如上所述,“std_logic”數(shù)據(jù)類型可用于表示一位信號(hào)。有趣的是,還有另一種 VHDL 數(shù)據(jù)類型“位”,它可以采用邏輯 1 或邏輯 0。
那么,如果“位”數(shù)據(jù)類型已經(jīng)涵蓋了數(shù)字信號(hào)的高低狀態(tài),為什么我們還需要 std_logic 數(shù)據(jù)類型呢?好吧,數(shù)字信號(hào)實(shí)際上不限于邏輯高和邏輯低。考慮一個(gè)三態(tài)逆變器,如圖 3 所示。

當(dāng)“enable”為高電平時(shí),“data_output”連接到 Vdd 或接地;然而,當(dāng)“enable”為低電平時(shí),“data_output”處于浮動(dòng)狀態(tài),即它沒(méi)有與 Vdd 或地的低阻抗連接,而是對(duì)外部電路呈現(xiàn)“高阻抗”。“std_logic”數(shù)據(jù)類型允許我們通過(guò)分配值“Z”來(lái)描述高阻抗模式下的數(shù)字信號(hào)。
還有另一種狀態(tài)——即除了邏輯高、邏輯低和高阻抗之外——可用于數(shù)字電路的設(shè)計(jì)。有時(shí)我們并不關(guān)心特定輸入的值。在這種情況下,用“無(wú)關(guān)”表示信號(hào)的值可以導(dǎo)致更有效的設(shè)計(jì)。“std_logic”數(shù)據(jù)類型支持“不關(guān)心”狀態(tài)。這為查找表提供了更好的硬件優(yōu)化。
“std_logic”數(shù)據(jù)類型還允許我們通過(guò)分配值“U”來(lái)表示未初始化的信號(hào)。這在用 VHDL 模擬一段代碼時(shí)會(huì)很有幫助。事實(shí)證明,“std_logic”數(shù)據(jù)類型實(shí)際上可以取九個(gè)值:
'U':未初始化
“1”:邏輯高電平的常用指標(biāo),也稱為“強(qiáng)制高電平”
“0”:邏輯低電平的常用指標(biāo),也稱為“強(qiáng)制低電平”
“Z”:高阻抗
'-':不在乎
'W':弱未知
'X':強(qiáng)制未知
'H':弱高
'L':弱低
在這些值中,我們通常使用“0”、“1”、“Z”和“-”。
?? ?讓我們看一個(gè)例子。
為圖 4 中的電路編寫 VHDL 代碼。

一般程序與前面的示例幾乎相同。代碼如下:
1 library IEEE;
2 use IEEE.STD_LOGIC_1164.ALL;
----------------------------------------------------
3 entity circuit_2 is
4 Port ( a : in STD_LOGIC;
5 b : in STD_LOGIC;
6 c : in STD_LOGIC;
7 d : in STD_LOGIC;
8 out1 : out STD_LOGIC;
9 out2 : out STD_LOGIC);
10 end circuit_2;
-----------------------------------------------------
11 architecture Behavioral of circuit_2 is
12 signal sig1: std_logic;
13 begin
14 sig1 <= ( a and b );
15 out1 <= ( sig1 or c );
16 out2 <= (not d);
17 end Behavioral;第 1 行和第 2 行:這些行將所需的庫(kù)和包添加到代碼中。由于使用了“std_logic”數(shù)據(jù)類型,我們必須添加“std_logic_1164”包。
第 3-10 行:這些行指定模塊的名稱及其輸入/輸出端口。這部分代碼對(duì)應(yīng)于圖 4 中的綠色部分。
第 11-17 行:這部分代碼描述了電路的操作(圖 4 中的藍(lán)色部分)。您可能已經(jīng)注意到,圖 4 中有一個(gè)內(nèi)部節(jié)點(diǎn);它被標(biāo)記為“sig1”。我們使用“entity”中的“port”語(yǔ)句來(lái)定義輸入/輸出端口,但是我們?nèi)绾味x電路的內(nèi)部節(jié)點(diǎn)呢?為此,我們使用“信號(hào)”關(guān)鍵字。
在上述代碼的第 12 行,“signal”關(guān)鍵字告訴綜合軟件電路中有一個(gè)節(jié)點(diǎn)標(biāo)記為“sig1”。與端口的定義類似,我們?cè)诿疤?hào)后使用關(guān)鍵字“std_logic”來(lái)指定所需的數(shù)據(jù)類型。現(xiàn)在我們可以給這個(gè)節(jié)點(diǎn)賦值(第 14 行)或使用它的值(第 15 行)。
?
為圖 5 中的電路編寫 VHDL 代碼。

該電路是一個(gè)二對(duì)一的多路復(fù)用器。當(dāng)“sel”為高時(shí),無(wú)論“b”的值如何,下與門的輸出都將為低。我們可以說(shuō)與門阻止“b”傳播到“sig2”。另一方面,由于“sel”為高電平,上與門的輸出將跟隨“a”。或者,等效地,“a”將達(dá)到“sig3”。由于在這種情況下“sig2”為低電平,因此或門的輸出將與“sig3”相同。因此,當(dāng)“sel”為高時(shí),“out1”將與“a”相同。
類似的討論將揭示,當(dāng)“sel”較低時(shí),“out1”將取“b”的值。因此,基于“sel”的值,我們可以允許一個(gè)輸入或另一個(gè)到達(dá)輸出。這稱為多路復(fù)用,電路稱為多路復(fù)用器。
我們可以使用以下代碼來(lái)描述圖 5 的電路:
1 library IEEE;
2 use IEEE.STD_LOGIC_1164.ALL;
-----------------------------------------------------
3 entity circuit_3 is
4 Port ( a : in STD_LOGIC;
5 b : in STD_LOGIC;
6 sel : in STD_LOGIC;
7 out1 : out STD_LOGIC);
8 end circuit_3;
-----------------------------------------------------
9 architecture Behavioral of circuit_3 is
10 signal sig1, sig2, sig3: std_logic;
11 begin
12 sig1 <= ( not sel );
13 sig2 <= ( b and sig1 );
14 sig3 <= ( a and sel );
15 out1 <= ( sig2 or sig3 );
16 end Behavioral;在本文中,我們討論了 VHDL 是什么、它的結(jié)構(gòu),并介紹了一些如何使用它來(lái)描述數(shù)字電路的示例。您現(xiàn)在應(yīng)該對(duì)以下幾點(diǎn)有了更好的理解:
代碼的“實(shí)體”部分指定 1)要描述的電路的名稱和 2)電路的端口;它建立了模塊與其周圍環(huán)境之間的接口。
代碼的“架構(gòu)”部分描述了電路的內(nèi)部操作。
VHDL 庫(kù)包含重要的定義,包括數(shù)據(jù)類型和運(yùn)算符的定義。一個(gè)庫(kù)本身可能包含幾個(gè)包。
我們幾乎總是需要將“ieee”庫(kù)和“std_logic_1164”包添加到我們的 VHDL 代碼中。
在“std_logic”數(shù)據(jù)類型的可能值中,我們通常使用“0”、“1”、“Z”和“-”。

今天小編帶來(lái)了:ISSCC2022套餐,里面有文章、PPT、Tutorial等,同學(xué)可以拿回去自己學(xué)習(xí)研究。


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