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