【正文】
度調(diào)節(jié)數(shù)據(jù)(即FPGA輸出的數(shù)據(jù)),用來調(diào)節(jié)波形DAC的基準(zhǔn)電壓,到達(dá)輸出波形幅度調(diào)節(jié)的目的。頻率顯示:頻率可以直接用4位BCD撥盤開關(guān)上的數(shù)字和檔位開關(guān)位置一起來表示頻率。首先啟動Quartus II軟件如圖2所示: 圖2 Quartus II啟動界面接著利用向?qū)?,建立一個新的工程。如圖2所示,分別指定創(chuàng)建工程的路徑,工程名和頂層文件名。一個工程中可以有多個文件,但只能有一個頂層文件。如圖3所示。點(diǎn)擊Filenew按鍵,選擇VHDL語言,如圖5所示。 圖4創(chuàng)建工程的結(jié)束界面 圖5芯片選擇 圖6創(chuàng)建VHDL File對話框 圖7 VHDL語言編輯框在圖7所示的VHDL語言編輯框中依次輸入分頻器、四選一選擇器、循環(huán)加法計數(shù)器等4鐘計數(shù)器、七段譯碼器等功能模塊的VHDL語言源程序。保存之后即可對源程序進(jìn)行編譯。編譯成功之后再進(jìn)行波形仿真,從中得出相應(yīng)數(shù)據(jù)及現(xiàn)象。t in the Process Statement39。有些EDA工具不檢查這個,可能會導(dǎo)致仿真結(jié)果與綜合出來的電路不一致。case y is 7段碼譯碼 when 0 = lcd(7 downto 1)=0000001。 when 2 = lcd(7 downto 1)=0010010。 when 4 = lcd(7 downto 1)=1001100。 when 6 = lcd(7 downto 1)=0100000。 when 8 = lcd(7 downto 1)=0000000。 when others = lcd(7 downto 1)=0000001。end process。第二個警告,認(rèn)為引腳p180直接到正電源了。 時鐘信號輸入 set, clr, up, down, zu, zd : in std_logic。 任意波鍵盤置入信號 u0,d0,sw : in std_logic。 檔位選擇信號 sss : in std_logic_vector( 4 downto 0 )。 BCD碼輸入 p180 : out std_logic。 顯示輸出 shift : out std_logic_vector(3 downto 0)。 波形、幅度數(shù)據(jù)輸出但實(shí)際上引腳p180是預(yù)留接口未用。執(zhí)行菜單命令,選擇new,再選擇需要的Vector Waveform File,單擊ok。如下圖所示。實(shí)體給出電路單元的外部輸入輸出接口信號和引用信息,結(jié)構(gòu)體給出了電路單元的內(nèi)部結(jié)構(gòu)和信號的行為特點(diǎn),程序包定義在設(shè)計結(jié)構(gòu)體和實(shí)體中將用到的常數(shù)、數(shù)據(jù)類型、子程序和設(shè)計好的電路單元等。library ieee。use 。第二部分是程序的實(shí)體,定義電路單元的輸入/輸出引腳名稱。實(shí)體的標(biāo)示符是ENTITY,實(shí)體以ENTITY開頭,以END結(jié)束。 Co,s: out std_logic_vector(7 downto 0))。其中,定義了a,b, Ci為輸入信號引腳,定義Co,s為輸出信號引腳。結(jié)構(gòu)體有三種描述方式,分別是行為(BEHAVIOR)描述方式、數(shù)據(jù)流(DATAFLOW)描述方式和結(jié)構(gòu)描述方式。結(jié)構(gòu)體以表示ARCHITECHTURE開頭,以END結(jié)尾。architecture behav of fulladder isBEGIN s=a xor b xor Ci。END fulladder上面程序段中結(jié)構(gòu)體的描述方式屬于程序流描述方式。這兩種語句也是VHDL程序設(shè)計中常用的語句。流程控制語句通過條件控制開關(guān)決定是否執(zhí)行一條或幾條語句或重復(fù)執(zhí)行一條或幾條語句或跳過一條或幾條語句 。IF語句的語句結(jié)構(gòu)有以下三種: IF 條件句 Then 第一種IF語句結(jié)構(gòu) 順序語句 END IF IF 條件句 Then 第二種IF語句結(jié)構(gòu) 順序語句 ELSE 順序語句 END IF IF 條件句 Then 第三種IF語句結(jié)構(gòu) 順序語句 ELSIF 條件句 Then 順序語句 ... ELSE 順序語句 END IFCASE語句根據(jù)滿足的條件直接選擇多項順序語句中的一項執(zhí)行,CASE語句的結(jié)構(gòu)如下:CASE 表達(dá)式 ISWhen 選擇值 = 順序語句When 選擇值 = 順序語句...END CASE 當(dāng)執(zhí)行到CASE語句時,首先計算表達(dá)式的值,然后根據(jù)條件句中與之相同的選擇值。表達(dá)式可以是一個整數(shù)類型或枚舉類型的值,也可以是由這些數(shù)據(jù)類型的值構(gòu)成的數(shù)組。FPGA的基礎(chǔ)就是數(shù)字電路和VHDL語言,其開發(fā)需要從頂層設(shè)計、模塊分層、邏輯實(shí)現(xiàn)、軟硬件調(diào)試等多方面著手。和Xilinx公司的ISE,本次課程設(shè)計選用的是Quartus II在設(shè)計的過程中我遇到了一些問題,比如對Quartus軟件的使用還不太熟悉,在編譯的時候出現(xiàn)的錯誤不知道怎么解決,請教了很多同學(xué)才弄明白。另一方面我也感受到動手實(shí)踐的重要性。FPGA是實(shí)用性很強(qiáng)的課程,只有多學(xué)多用,邊學(xué)邊用,才能促進(jìn)提高自己的能力。6參考文獻(xiàn)【1】潘松 黃繼業(yè). EDA技術(shù)與VHDL(第二版).北京:清華大學(xué)出版社,【2】:【3】付家才. :化學(xué)工業(yè)出版社,【4】漢澤西. :北京航空航天大學(xué)出版社,【5】:四川大學(xué)出版社,【6】章彬宏 :北京理工大學(xué)出版社,【7】劉艷萍 高振斌 :國防工業(yè)出版社,7附錄源程序代碼library ieee。use 。entity keshe isport(clk : in std_logic。 各個波形特征的調(diào)節(jié)觸發(fā)信號 posting : in std_logic。 方波A、B的切換sw,和方波B的幅度調(diào)節(jié)按鍵 ss : in std_logic_vector( 3 downto 0 )。 波形選擇信號 Data3, Data2, Data1,Data0 : in std_logic_vector(3 downto 0)。 預(yù)留接口 lcd : out std_logic_vector(7 downto 0)。 位碼輸出 dd, a : out std_logic_vector( 7 downto 0))。architecture behav of keshe issubtype word is std_logic_vector( 7 downto 0 )。signal ram : unit。signal qq : integer range 0 to 78125000。signal coun : integer range 0 to 78125000。signal b : integer range 0 to 78125000。signal z, con : integer range 0 to 63。signal amp, amp0, d : std_logic_vector(7 downto 0)。signal bcd01,bcd11,bcd21,bcd31 : integer range 0 to 9。signal y : integer range 0 to 9。beginqq=781250 when ss=1000 else 7812500 when ss=0100 else 78125000 when ss=0010 else 78125。qqq信號對應(yīng)SW=1時的檔位選擇信號SS,實(shí)現(xiàn)方波B的頻率預(yù)置process(clk) 此進(jìn)程分別描述了各種波形的頻率、幅度(方波A的占空比)調(diào)節(jié)以及各種波形的任意線形疊加等。variable count : integer range 0 to 78125000。variable count1 : integer range 0 to 12500000。variable ddd : std_logic_vector(9 downto 0)。variable adr : integer range 0 to 63。139。 adr:=conv_integer(Data3)*10+conv_integer(Data2)。139。 對置入的任意波形數(shù)據(jù)進(jìn)行儲存 elsif clr=39。 then adr:=0。039。 end loop。 end if。 end if。139。 b=0。c=0。amp0=01111111。tmp=conv_integer(Data3)*1000+conv_integer(Data2)*100+conv_integer(Data1)*10+conv_integer(Data0)。 幅值 else if tmp0 then if sw=39。 then if counqq then coun=coun+tmp。 頻率到采樣點(diǎn)間隔脈沖數(shù)轉(zhuǎn)換 else if count=b then count:=1。 else f=f+1。 if sss=00010 then