VHDL全名Very-High-Speed Integrated Circuit Hardware Description Language,誕生于1982年。1987年底,VHDL被IEEE和美國國防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語言 。自IEEE-1076(簡稱87版)之后,各EDA公司相繼推出自己的VHDL設(shè)計環(huán)境,或宣布自己的設(shè)計工具可以和VHDL接口。1993年,IEEE對VHDL進(jìn)行了修訂,從更高的抽象層次和系統(tǒng)描述能力上擴(kuò)展VHDL的內(nèi)容,公布了新版本的VHDL,即IEEE標(biāo)準(zhǔn)的1076-1993版本,簡稱93版。VHDL和Verilog作為IEEE的工業(yè)標(biāo)準(zhǔn)硬件描述語言,得到眾多EDA公司支持,在電子工程領(lǐng)域,已成為事實上的通用硬件描述語言。
本文為大家分享用vhdl語言編寫的9秒倒計時器程序。
VHDL語言優(yōu)勢
(1)與其他的硬件描述語言相比,VHDL具有更強的行為描述能力,從而決定了他成為系統(tǒng)設(shè)計領(lǐng)域最佳的硬件描述語言。強大的行為描述能力是避開具體的器件結(jié)構(gòu),從邏輯行為上描述和設(shè)計大規(guī)模電子系統(tǒng)的重要保證。
(2)VHDL豐富的仿真語句和庫函數(shù),使得在任何大系統(tǒng)的設(shè)計早期就能查驗設(shè)計系統(tǒng)的功能可行性,隨時可對設(shè)計進(jìn)行仿真模擬。
(3)VHDL語句的行為描述能力和程序結(jié)構(gòu)決定了他具有支持大規(guī)模設(shè)計的分解和已有設(shè)計的再利用功能。符合市場需求的大規(guī)模系統(tǒng)高效,高速的完成必須有多人甚至多個開發(fā)組共同并行工作才能實現(xiàn)。
(4)對于用VHDL完成的一個確定的設(shè)計,可以利用EDA工具進(jìn)行邏輯綜合和優(yōu)化,并自動的把VHDL描述設(shè)計轉(zhuǎn)變成門級網(wǎng)表。
(5)VHDL對設(shè)計的描述具有相對獨立性,設(shè)計者可以不懂硬件的結(jié)構(gòu),也不必管理最終設(shè)計實現(xiàn)的目標(biāo)器件是什么,而進(jìn)行獨立的設(shè)計。
完整程序
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
--------------------------------------------------------------------------------------------
ENTITY CNT9 IS
PORT
( CLK,en: IN STD_LOGIC;
PLD,ENB : IN STD_LOGIC; -------PLD表示復(fù)位信號
WARN: OUT STD_LOGIC;
S0 : OUT STD_LOGIC_VECTOR(6 DOWNTO 0));------------譯碼輸出,S0為個位
END CNT9;
--------------------------------------------------------------------------------------------
ARCHITECTURE A OF CNT9 IS
SIGNAL SS : STD_LOGIC_VECTOR (3 DOWNTO 0) ; -------------SS表示個位
BEGIN
PRO1: PROCESS (CLK,en,ENB)
VARIABLE TMPA: STD_LOGIC_VECTOR (3 DOWNTO 0);
VARIABLE TMPWARN: STD_LOGIC;
BEGIN
IF en=‘1’ THEN TMPA:=“1001”;TMPWARN:=‘0’;
ELSIF CLK‘EVENT AND CLK=’1‘ THEN
TMPA:=TMPA-1;
if tmpa=’0‘ then TMPWARN:=’1‘;
END IF;
END IF;
SS<=TMPA;WARN<=TMPWARN;
PROCESS(SS)
BEGIN
CASE SS IS --------------------------個位顯示部分
WHEN “0000” => S0 <=“0111111”;--顯示0
WHEN “0001” => S0 <=“0000110”;--顯示1
WHEN “0010” => S0 <=“1011011”;--顯示2
WHEN “0011” => S0 <=“1001111”;--顯示3
WHEN “0100” => S0<=“1100110”;--顯示4
WHEN “0101” => S0 <=“1101101”;--顯示5
WHEN “0110” => S0 <=“1111101”;--顯示6
WHEN “0111” => S0 <=“0000111”;--顯示7
WHEN “1000” => S0 <=“1111111”;--顯示8
WHEN “1001” => S0 <=“1101111”;--顯示9
WHEN OTHERS =>S0<=“0000000”;
END CASE ;
END PROCESS;
END A;