VHDL是一種應(yīng)用廣泛的硬件描述語言,設(shè)計(jì)者可以通過它編寫代碼,通過模擬器仿真驗(yàn)證其功能,完成邏輯綜合與邏輯優(yōu)化,最后通過下載到相應(yīng)的可編程邏輯器件(如FPGA)中來實(shí)現(xiàn)設(shè)計(jì)。本設(shè)計(jì)是利用Quartus II軟件,采用VHDL語言設(shè)計(jì)一個(gè)用8個(gè)開關(guān)對(duì)應(yīng)8個(gè)數(shù)字顯示。按sw0到sw7可以顯示1到8的數(shù)值,并在選擇開關(guān)時(shí)發(fā)出聲響。完成后下載到實(shí)驗(yàn)箱,實(shí)現(xiàn)設(shè)計(jì)功能。
1、Quartus II簡(jiǎn)介
Max+plus II 作為Altera的上一代PLD設(shè)計(jì)軟件,由于其出色的易用性而得到了廣泛的應(yīng)用。目前Altera已經(jīng)停止了對(duì)Max+plus II 的更新支持。Quartus II 是Altera公司繼Max+plus II之后開發(fā)的一種針對(duì)其公司生產(chǎn)的系列CPLD/PGFA器件的綜合性開發(fā)軟件,它的版本不斷升級(jí),從4.0版到10.0版,該軟件有如下幾個(gè)顯著的特點(diǎn):
1)Quartus II 的優(yōu)點(diǎn)
該軟件界面友好,使用便捷,功能強(qiáng)大,是一個(gè)完全集成化的可編程邏輯設(shè)計(jì)環(huán)境,是先進(jìn)的EDA工具軟件。該軟件具有開放性、與結(jié)構(gòu)無關(guān)、多平臺(tái)、完全集成化、豐富的設(shè)計(jì)庫、模塊化工具等特點(diǎn),支持原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多種設(shè)計(jì)輸入形式,內(nèi)嵌自有的綜合器以及仿真器,可以完成從設(shè)計(jì)輸入到硬件配置的完整PLD設(shè)計(jì)流程。
Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl腳本完成設(shè)計(jì)流程外,提供了完善的用戶圖形界面設(shè)計(jì)方式。具有運(yùn)行速度快,界面統(tǒng)一,功能集中,易學(xué)易用等特點(diǎn)。
2)Quartus II對(duì)器件的支持
Quartus II支持Altera公司的MAX 3000A系列、MAX 7000系列、MAX 9000系列、ACEX 1K系列、APEX 20K系列、APEX II系列、FLEX 6000系列、FLEX 10K系列,支持MAX7000/MAX3000等乘積項(xiàng)器件。支持MAX II CPLD系列、Cyclone系列、Cyclone II、Stratix II系列、Stratix GX系列等。支持IP核,包含了LPM/MegaFunction宏功能模塊庫,用戶可以充分利用成熟的模塊,簡(jiǎn)化了設(shè)計(jì)的復(fù)雜性、加快了設(shè)計(jì)速度。此外,Quartus II 通過和DSP Builder工具與Matlab/Simulink相結(jié)合,可以方便地實(shí)現(xiàn)各種DSP應(yīng)用系統(tǒng);支持Altera的片上可編程系統(tǒng)(SOPC)開發(fā),集系統(tǒng)級(jí)設(shè)計(jì)、嵌入式軟件開發(fā)、可編程邏輯設(shè)計(jì)于一體,是一種綜合性的開發(fā)平臺(tái)。
3)Quartus II對(duì)第三方EDA工具的支持
對(duì)第三方EDA工具的良好支持也使用戶可以在設(shè)計(jì)流程的各個(gè)階段使用熟悉的第三放EDA工具。
Altera的Quartus II可編程邏輯軟件屬于第四代PLD開發(fā)平臺(tái)。該平臺(tái)支持一個(gè)工作組環(huán)境下的設(shè)計(jì)要求,其中包括支持基于Internet的協(xié)作設(shè)計(jì)。Quartus平臺(tái)與Cadence、ExemplarLogic、 MentorGraphics、Synopsys和Synplicity等EDA供應(yīng)商的開發(fā)工具相兼容。改進(jìn)了軟件的LogicLock模塊設(shè)計(jì)功能,增添 了FastFit編譯選項(xiàng),推進(jìn)了網(wǎng)絡(luò)編輯性能,而且提升了調(diào)試能力。
1.2、VHDL簡(jiǎn)介
在傳統(tǒng)的硬件電路設(shè)計(jì)中,主要的設(shè)計(jì)文件是電路原理圖,而采用HDL設(shè)計(jì)系統(tǒng)硬件電路時(shí)主要使用HDL編寫源程序。所謂硬件描述語言HDL(HardwareDes cription Language),就是該語言可以描述硬件電路的功能,信號(hào)連接關(guān)系及定時(shí)關(guān)系。許多公司開發(fā)了自己專有的HDL,包括Zycad公司的ISP,Gateway DesignAutomation公司的Verilog以及Mentor Graphics公司的BLM。其中,Silicon Compiler公司的M及Gateway公司的Verilog以C語言為基礎(chǔ)。UDL/I在日本以標(biāo)準(zhǔn)HDL的形式出現(xiàn)。多年來設(shè)計(jì)者一直使用這些專用的HDL。1982年,各ASIC芯片廠商相繼開發(fā)了用于各自目的的HDL。1987年底,IEEE確認(rèn)美國國防部開發(fā)的VHDL為標(biāo)準(zhǔn)硬件描述語言(IEEE.1076)。之后,各EDA公司研制的硬件電路設(shè)計(jì)工具逐漸向VHDL靠攏,VHDL在電子設(shè)計(jì)領(lǐng)域得到廣泛的接受,1993年,IEEE對(duì)VHDL進(jìn)行了修訂,公布了新版本的VHDL(即IEEE.1076.1993)?,F(xiàn)在,VHDL和Verilog作為IEEE的工業(yè)標(biāo)準(zhǔn)硬件描述語言,在電子工程領(lǐng)域,從各公司的設(shè)計(jì)人員到各大學(xué)的教授、學(xué)生,都極其重視對(duì)其的學(xué)習(xí)研究,VHDL已成為事實(shí)上的通用硬件描述語言。有專家認(rèn)為,在21世紀(jì)中,幾乎全部的數(shù)字系統(tǒng)設(shè)計(jì)任務(wù)將由VHDL與Verilog語言承擔(dān),VHDL將是電子工程設(shè)計(jì)人員的必備知識(shí)。VHDL和其他語言相比,最大的區(qū)別在于設(shè)計(jì)方法上的差別。
VHDL的主要優(yōu)點(diǎn)有:
(1)VHDL支持自頂至下的和基于庫的設(shè)計(jì)方法,而且支持同步電路、異步電路、現(xiàn)場(chǎng)可編程門陣列器件FPGA(field programmable gate array)以及其他隨機(jī)電路的設(shè)計(jì)。VHDL具有比其他硬件描述語言更強(qiáng)的行為描述能力,基于抽象的行為描述風(fēng)格避開了具體的器件結(jié)構(gòu),使設(shè)計(jì)人員能從邏輯行為上描述和設(shè)計(jì)大規(guī)模電子系統(tǒng)。目前流行的EDA工具和VHDL綜合器大都能實(shí)現(xiàn)行為描述到RTL(Register Transfer Level)描述的轉(zhuǎn)換。
(2)VHDL語句的行為描述能力和程序結(jié)構(gòu)決定了它具有支持大規(guī)模設(shè)計(jì)的分解和已有設(shè)計(jì)再利用的功能,它支持系統(tǒng)的數(shù)學(xué)模型直到門級(jí)電路的描述,并且高層次的行為描述與低層次的門級(jí)電路描述、結(jié)構(gòu)描述可以混合使用。這些特點(diǎn)符合IC設(shè)計(jì)的市場(chǎng)要求。VHDL支持系統(tǒng)級(jí)描述,這是它優(yōu)于其他VHDL的最重要的特點(diǎn)。例如,Verilog語言是一種門級(jí)電路描述語言,其風(fēng)格接近于電路原理圖,設(shè)計(jì)者需要搞清楚具體的電路結(jié)構(gòu)的細(xì)節(jié),因此工作量通常較大。VHDL語言卻最適合于描述電路的行為,即描述電路的功能,然后由綜合器來生成符合要求的電路網(wǎng)絡(luò)。設(shè)計(jì)者在熟悉基本單元電路的描述風(fēng)格,積累一定的設(shè)計(jì)經(jīng)驗(yàn)后,就會(huì)為用VHDL設(shè)計(jì)同等性能電路的高效率所鼓舞。
(3)VHDL的硬件描述與具體的工藝技術(shù)和硬件結(jié)構(gòu)無關(guān),當(dāng)門級(jí)或門級(jí)以上的描述通過仿真檢驗(yàn)后,再利用相應(yīng)的工具將設(shè)計(jì)映射成不同的工藝,因此電路的設(shè)計(jì)與工藝的改變是相互獨(dú)立的。彼此的改變不會(huì)產(chǎn)生不良影響,并且VHDL硬件描述語言的實(shí)現(xiàn)目標(biāo)器件的選擇范圍廣泛,可使用各系列的CPLD、FPGA及各種門陣列器件。
(4)VHDL具有類屬描述語句和子程序調(diào)用等功能,對(duì)于己完成的設(shè)計(jì)源程序,可以通過修改類屬參數(shù)表和函數(shù)的辦法來改變?cè)O(shè)計(jì)的規(guī)模和結(jié)構(gòu)。VHDL具有豐富的仿真語句和庫函數(shù),使得門電路級(jí)的功能仿真、檢查成為可能,使設(shè)計(jì)者對(duì)整個(gè)工程設(shè)計(jì)的結(jié)構(gòu)和功能的可行性做出決策。
(5)VHDL作為一種IEEE的工業(yè)標(biāo)準(zhǔn),使VHDL的設(shè)計(jì)成果便于重復(fù)利用和交流。這就更進(jìn)一步推動(dòng)了VHDL語言的推廣及完善。另外,由于其語法嚴(yán)格,給閱讀和使用帶來極大的便利。
2、硬件設(shè)計(jì)
本設(shè)計(jì)硬件平臺(tái)采用武漢理工大學(xué)EDA實(shí)驗(yàn)箱,如下圖所示。
所用到的部分有LED數(shù)碼管、開關(guān)、蜂鳴器等,具體連接如下。
data_o[0] PIN_103 key[0] PIN_49
data_o[1] PIN_100 key[1] PIN_50
data_o[2] PIN_99 key[2] PIN_51
data_o[3] PIN_98 key[3] PIN_52
data_o[4] PIN_97 key[4] PIN_53
data_o[5] PIN_96 key[5] PIN_54
data_o[6] PIN_94 key[6] PIN_55
data_o[7] PIN_91 key[7] PIN_56
l[0] PIN_83 clk PIN_16
l[1] PIN_84 bell PIN_78
l[2] PIN_85
其中data_o[0]—data_o[7]為每個(gè)LED數(shù)碼管0-7的段選,key[0]—key[7]為控制開關(guān)0-7,l[0]—l[3]控制8個(gè)LED數(shù)碼管,clk為時(shí)鐘輸入,bell為蜂鳴器
3、軟件設(shè)計(jì)
3.1、設(shè)計(jì)方案
本設(shè)計(jì)的VHDL程序主要有共有3個(gè)部分:分頻、數(shù)碼管掃描進(jìn)程、顯示控制進(jìn)程。方案原理圖如下。
3.2、完整程序
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY key IS
PORT(clk : IN STD_LOGIC;
key : in std_logic_vector(7 downto 0);
l : out STD_LOGIC_VECTOR(2 downto 0);
data_o : out STD_LOGIC_VECTOR(7 downto 0);
bell : out STD_LOGIC:=‘0’
);
END key;
ARCHITECTURE an OF key IS
signal clk_1k : std_logic;
signal p : integer range 0 to 7;
begin
process(clk)
variable cnt1 : integer range 0 to 200;
variable cnt2 : integer range 0 to 125;
begin
if clk‘event and clk=’1‘ then
if cnt1=200 then
cnt1:=0;
if cnt2=125 then
cnt2:=0;
clk_1k《=not clk_1k;
else
cnt2:=cnt2+1;
end if;
else
cnt1:=cnt1+1;
end if;
end if;
end process;
process(p,clk_1k)
begin
if clk_1k=’1‘ and clk_1k’event then
if p=7 then
p《=0;
else
p《=p+1;
end if;
end if;
case p is
when 0 =》 l《=“000”;
when 1 =》 l《=“001”;
when 2 =》 l《=“010”;
when 3 =》 l《=“011”;
when 4 =》 l《=“100”;
when 5 =》 l《=“101”;
when 6 =》 l《=“110”;
when 7 =》 l《=“111”;
when others=》
end case;
end process;
process(clk_1k)
FUNCTION b_to_s7(bcd8421:INTEGER RANGE 0 TO 9) RETURN STD_LOGIC_VECTOR IS
VARIABLE smg7: STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
CASE bcd8421 IS
WHEN 0 =》 smg7:=“11111100”;
WHEN 1 =》 smg7:=“01100000”;
WHEN 2 =》 smg7:=“11011010”;
WHEN 3 =》 smg7:=“11110010”;
WHEN 4 =》 smg7:=“01100110”;
WHEN 5 =》 smg7:=“10110110”;
WHEN 6 =》 smg7:=“10111110”;
WHEN 7 =》 smg7:=“11100000”;
WHEN 8 =》 smg7:=“11111110”;
WHEN 9 =》 smg7:=“11110110”;
END CASE;
RETURN smg7;
END b_to_s7;
begin
if clk_1k=‘1’ then
case key is
when “11111111”=》bell《=‘0’;
when “11111110”=》 data_o《=b_to_s7(1);bell《=‘1’;
when “11111101”=》data_o《=b_to_s7(2);bell《=‘1’;
when “11111011”=》data_o《=b_to_s7(3);bell《=‘1’;
when “11110111”=》data_o《=b_to_s7(4);bell《=‘1’;
when “11101111”=》data_o《=b_to_s7(5);bell《=‘1’;
when “11011111”=》data_o《=b_to_s7(6);bell《=‘1’;
when “10111111”=》data_o《=b_to_s7(7);bell《=‘1’;
when “01111111”=》data_o《=b_to_s7(8);bell《=‘1’;
when others=》data_o《=“10001111”;bell《=‘1’;
end case;
end if;
end process;
end an;
4、實(shí)驗(yàn)結(jié)果
所編寫程序經(jīng)過下載到所用實(shí)驗(yàn)箱后,當(dāng)分別撥動(dòng)開關(guān)sw0—sw7時(shí),在LED數(shù)碼管上分別顯示數(shù)字1—8,并且蜂鳴器發(fā)出聲響,有關(guān)部分運(yùn)行結(jié)果的如下圖所示。
評(píng)論