【文章內(nèi)容簡(jiǎn)介】
std_logic_vector( 3 downto 0 )。 檔位選擇信號(hào) sss : in std_logic_vector( 4 downto 0 )。 波形選擇信號(hào) Data3, Data2, Data1,Data0 : in std_logic_vector(3 downto 0)。 BCD 碼輸入 p180 : out std_logic。 預(yù)留接口 lcd : out std_logic_vector(7 downto 0)。 顯示輸出 shift : out std_logic_vector(3 downto 0)。 位碼輸出 dd, a : out std_logic_vector( 7 downto 0))。 波形、幅度數(shù)據(jù)輸出 但實(shí)際上引腳 p180 是預(yù)留接口未用。 編譯結(jié)果 圖 9 編譯結(jié)果 建立仿真文件 在編譯通過(guò)后,要建立后綴為 vwf 的仿真波形文件。 執(zhí)行菜單命令,選擇 new,再選擇需要的 Vector Waveform File,單擊 ok。在波形文件編輯方式下,右鍵選擇 insert 添加信號(hào)節(jié)點(diǎn),設(shè)置相應(yīng)的參數(shù)。如下圖所示。 17 圖 10 仿真波形文件建立 18 圖 11 仿真波形參數(shù)設(shè)置 仿真結(jié)果 仿真結(jié)果如下圖所示 19 圖 12 仿真波形 RTL 視圖 生成的 RTL 視圖如下 20 圖 13 RTL 視圖 21 4 程序分析 語(yǔ)言分析 一個(gè) VHDL 語(yǔ)言的設(shè)計(jì)程序描述的是一個(gè)電路單元,這個(gè)電路單元可以是一個(gè)門(mén)電 路,或者是一個(gè)計(jì)數(shù)器,也可以是一個(gè) CPU,一般情況下,一個(gè)完整的VHDL 語(yǔ)言程序至少包括實(shí)體、結(jié)構(gòu)體和程序包三個(gè)部分。實(shí)體給出電路單元的外部輸入輸出接口信號(hào)和引用信息,結(jié)構(gòu)體給出了電路單元的內(nèi)部結(jié)構(gòu)和信號(hào)的行為特點(diǎn),程序包定義在設(shè)計(jì)結(jié)構(gòu)體和實(shí)體中將用到的常數(shù)、數(shù)據(jù)類(lèi)型、子程序和設(shè)計(jì)好的電路單元等。 第一部分是程序包,程序包是用 VHDL 語(yǔ)言編寫(xiě)的共享文件,定義在設(shè)計(jì)結(jié)構(gòu)體和實(shí)體中將要用到的常數(shù)、數(shù)據(jù)類(lèi)型、子程序和設(shè)計(jì)好的電路單元等,放在文件目錄名稱(chēng)為 IEEE 的程序包庫(kù)中。 library ieee。 use 。 use 。 use 。 第二部分是程序的實(shí)體,定義電路單元的輸入 /輸出引腳名稱(chēng)。程序的實(shí)體名稱(chēng)可以任意取,但必須與 VHDL 程序的文件名稱(chēng)相同。實(shí)體的標(biāo)示符是 ENTITY,實(shí)體以 ENTITY開(kāi)頭,以 END 結(jié)束。 ENTITY fulladder IS PORT(a,b,Ci:in std_logic。 Co,s: out std_logic_vector(7 downto 0))。 END fulladder。 其中,定義了 a,b, Ci 為輸入信號(hào)引腳,定義 Co,s 為輸出信號(hào)引腳。 第三部分是程序的結(jié)構(gòu)體,具體描述電路的內(nèi)部結(jié)構(gòu)和邏輯功能。結(jié)構(gòu)體有三種描述方式,分別是行為( BEHAVIOR)描述方式、數(shù)據(jù)流( DATAFLOW)描述方式和結(jié)構(gòu)描述方式。其中數(shù)據(jù)流描述方式又被稱(chēng)為寄存器( RTL)描述方式。結(jié)構(gòu)體以表示 ARCHITECHTURE 開(kāi)頭,以 END 結(jié)尾。結(jié)構(gòu)體的名稱(chēng)可以任取。 architecture behav of fulladder is BEGIN s=a xor b xor Ci。 Co=(a and b)or(a and Ci)or(b and Ci)。 END fulladder 上面程序段中結(jié)構(gòu)體的描述方式屬于程序流描述方式。 主要函數(shù)語(yǔ)句分析 在程序設(shè)計(jì)中,主要使用的函數(shù)語(yǔ)句有兩種: Ifelse 語(yǔ)句和 casewhen 語(yǔ)句。這兩種語(yǔ)句也是 VHDL 程序設(shè)計(jì)中常用的語(yǔ)句。二者都屬于流程控制語(yǔ)句。流程控制語(yǔ)句通過(guò)條件控制開(kāi)關(guān)決定是否執(zhí)行一條或幾條語(yǔ)句或重復(fù)執(zhí)行一條或 22 幾條語(yǔ)句或跳過(guò)一條或幾條語(yǔ)句 。 IF 語(yǔ)句是一種條件語(yǔ)句,它根據(jù)語(yǔ)句中所設(shè)置的一種或多種條件,有選擇地執(zhí)行指定的順序語(yǔ)句。 IF 語(yǔ)句的語(yǔ)句結(jié)構(gòu)有以下三種: IF 條件句 Then 第一種 IF 語(yǔ)句結(jié)構(gòu) 順序語(yǔ)句 END IF IF 條件句 Then 第二種 IF 語(yǔ)句結(jié)構(gòu) 順序語(yǔ)句 ELSE 順序語(yǔ)句 END IF IF 條件句 Then 第三種 IF 語(yǔ)句結(jié)構(gòu) 順序語(yǔ)句 ELSIF 條件句 Then 順序語(yǔ)句 ... ELSE 順序語(yǔ)句 END IF CASE 語(yǔ)句根據(jù)滿足的條件直接選擇多項(xiàng)順序語(yǔ)句中的一項(xiàng)執(zhí)行, CASE 語(yǔ)句的結(jié)構(gòu)如下: CASE 表達(dá)式 IS When 選擇值 = 順序語(yǔ)句 When 選擇值 = 順序語(yǔ)句 ... END CASE 當(dāng)執(zhí)行到 CASE 語(yǔ)句時(shí),首先計(jì)算表達(dá)式的值,然后根據(jù)條件句中與之相同的選擇值。執(zhí)行對(duì)應(yīng)的順序語(yǔ)句,最后結(jié)束 CASE 語(yǔ)句。表達(dá)式可以是一個(gè)整數(shù)類(lèi)型或枚舉類(lèi)型的值, 也可以是由這些數(shù)據(jù)類(lèi)型的值構(gòu)成的數(shù)組。 23 5 小結(jié) 通過(guò)這次 FPGA 課程設(shè)計(jì), 我 對(duì) FPGA 的基本原理有了進(jìn)一步的認(rèn)識(shí)。 FPGA 的基礎(chǔ)就是數(shù)字 電路 和 VHDL 語(yǔ)言 ,其 開(kāi)發(fā)需要從頂層設(shè)計(jì)、模塊分層、邏輯實(shí)現(xiàn)、軟硬件調(diào)試等多方面著手。 開(kāi)發(fā)環(huán)境常用的有 Altera 公司的 Quartus II 和 Xilinx 公司 的 ISE,本次課程設(shè)計(jì)選用的是 Quartus II 。 此次課程設(shè)計(jì) 暴露了 我 平時(shí)學(xué)習(xí)中的許多不足。 在設(shè)計(jì)的過(guò)程中我 遇到了一些問(wèn)題, 比如 對(duì) Quartus 軟件的使用還不太熟悉,在編譯的時(shí)候出現(xiàn)的錯(cuò)誤不知道怎么解決,請(qǐng)教了很多同學(xué)才弄明 白。還有進(jìn)行仿真之前需要自己建立仿真波形文件,才能進(jìn)行仿真等等,但在和老師、同學(xué)的交流下,最后我都解決了問(wèn)題。 另一方面我也感受到 動(dòng)手實(shí)踐 的重要性。動(dòng)手實(shí)踐是理論知識(shí)得以靈活運(yùn)用的必要前提,也是今后 走上工作崗位之后能夠很好的完成設(shè)計(jì)工作的技術(shù)保證。FPGA 是實(shí)用性很強(qiáng)的課程,只有多學(xué)多用,邊學(xué)邊用,才能促進(jìn)提 高自己的能力。 雖然課設(shè)完成了,但是我意識(shí)到,我對(duì) FPGA 技術(shù)僅僅只是停留在入門(mén)的階段, 想要有更大的發(fā)展,更深入的研究,還需要更多的努力與實(shí)踐。 24 6 參考文獻(xiàn) 【 1】 潘松 黃繼業(yè) . EDA 技 術(shù)與 VHDL(第二版) .北京:清華大學(xué)出版社, 【 2】 康華光 .電子技術(shù)基礎(chǔ) .北京:高等教育出版社 . 【 3】 付家才 . EDA 工程實(shí)踐技術(shù) .北京:化學(xué)工業(yè)出版社, 【 4】 漢澤西 . EDA 技術(shù)及其應(yīng)用 .北京:北京航空航天大學(xué)出版社, 【 5】 趙剛 .EDA 技術(shù)簡(jiǎn)明教程 .成都:四川大學(xué)出版社, 【 6】 章彬宏 周正林 .EDA 應(yīng)用技術(shù) .北京:北京理工大學(xué)出版社, 【 7】 劉艷萍 高振斌 李志平 .EDA 實(shí)用技術(shù)及應(yīng)用 .北京:國(guó)防工業(yè)出版社 , 25 7 附錄源程序代碼 library ieee。 use 。 use 。 use 。 entity keshe is port(clk : in std_logic。 時(shí)鐘信號(hào)輸入 set, clr, up, down, zu, zd : in std_logic。 各個(gè)波形特征的調(diào)節(jié)觸發(fā)信號(hào) posting : in std_logic。 任意波鍵盤(pán)置入信號(hào) u0,d0,sw : in std_logic。 方波 A、 B 的切換 sw,和方波 B 的幅度調(diào)節(jié)按鍵 ss : in std_logic_vector( 3 downto 0 )。 檔位選擇信號(hào) sss : in std_logic_vector( 4 downto 0 )。 波形選擇信號(hào) Data3, Data2, Data1,Data0 : in std_logic_vector(3 downto 0)。 BCD 碼輸入 p180 : out std_logic。 預(yù)留接口 lcd : out std_logic_vector(7 downto 0)。 顯示輸出 shift : out std_logic_vector(3 downto 0)。 位碼輸出 dd, a : out std_logic_vector( 7 downto 0))。 波形、幅度數(shù)據(jù)輸出 end keshe。 architecture behav of keshe is subtype word is std_logic_vector( 7 downto 0 )。 type unit is array(63 downto 0) of word。 signal ram : unit。 signal qqq : integer range 0 to 250000000。 signal qq : integer range 0 to 78125000。 signal tmp : integer range 0 to 9999。 signal coun : integer range 0 to 78125000。 signal coun0 : integer range 0 to 250000000。 signal b : integer range 0 to 78125000。 26 signal c : integer range 0 to 500000000。 signal z, con : integer range 0 to 63。 signal f : std_logic_vector( 7 downto 0 )。 signal amp, amp0, d : std_logic_vector(7 downto 0)。 signal bcd0,bcd1,bcd2,bcd3 : integer range 0 to 9。 signal bcd01,bcd11,bcd21,bcd31 : integer range 0 to 9。 signal bcd00,bcd10,bcd20,bcd30 : integer range 0 to 9。 signal y : integer range 0 to 9。 signal addr : integer range 0 to 63。 begin qq=781250 when ss=1000 else