【文章內(nèi)容簡介】
6=0000。CN=39。039。 ELSIF RISING_EDGE(CLK) THEN IF(EN=39。139。) THEN IF SCOUNT6=0101 THEN CN=39。139。 第 8 頁 〈 共 20 頁 〉 SCOUNT6=0000。 ELSE CN=39。039。 SCOUNT6=SCOUNT6+39。139。 END IF。 END IF。 END IF。 END PROCESS。 END ART。 程序分析:六進制計數(shù)器的 VHDL 源程序( )的功能是:當時鐘信號 CLK、復位信號 CLR或時鐘使能信號 EN中任一信號發(fā)生變化,都將啟動進程語句 PROCESS。此時如果 CLR 為 ’1’,將對計數(shù)器清零,即復位;如果 CLR 為 ’0’,則看是否有時鐘信號的上升沿:如果此時有 CLK信號,又測得 EN=‘ 1‘,即允許計數(shù)器計數(shù),此時若計數(shù)值小于 5,即 SCOUNT60101, 計數(shù)器將進行正常計數(shù),即執(zhí)行SCOUNT6=SCOUNT6+39。139。;否則當計數(shù)值 SCOUNT6 達到 5 時,輸出高電平,作為十進制計 數(shù)的進位溢出信號,當計數(shù)值 SCOUNT6 為其它值時輸出低電平;但如果 測得 EN=‘ 0‘使 SCOUNT6 保持原值,即將計數(shù)值向端口輸出: COUNT6=SCOUNT6。 計時器的 VHDL 源程序( ) ENTITY COUNT IS PORT(CLK:IN STD_LOGIC。 CLR:IN STD_LOGIC。 EN:IN STD_LOGIC。 S_1MS:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)。 S_10MS:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)。 S_100MS:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)。 S_1S:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)。 S_10S:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)。 S_1MIN:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)。 S_10MIN:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)。 HOUR:OUT STD_LOGIC_VECTOR(3 DOWNTO 0))。 END COUNT。 第 9 頁 〈 共 20 頁 〉 architecture ART OF COUNT IS COMPONENT CDU10 PORT(CLK,CLR,EN:IN STD_LOGIC。 CN:OUT STD_LOGIC。 COUNT10:out std_logic_vector(3 downto 0))。 END COMPONENT CDU10。 COMPONENT CDU6 PORT(CLK,CLR,EN:IN STD_LOGIC。 CN:OUT STD_LOGIC。 COUNT6:out std_logic_vector(3 downto 0))。 END COMPONENT CDU6。 SIGNAL A,B,C,D,E,F,G,H: std_logic。 BEGIN U1:CDU10 PORT MAP(CLK,CLR,EN,A,S_1MS)。 U2:CDU10 PORT MAP(A,CLR,EN,B,S_10MS)。 U3:CDU10 PORT MAP(B,CLR,EN,C,S_100MS)。 U4:CDU10 PORT MAP(C,CLR,EN,D,S_1S)。 U5:CDU6 PORT MAP(D,CLR,EN,E,S_10S)。 U6:CDU10 PORT MAP(E,CLR,EN,F,S_1MIN)。 U7:CDU6 PORT MAP(F,CLR,EN,G,S_10MIN)。 U8:CDU10 PORT MAP(G,CLR,EN,H,HOUR)。 END ART。 程序分析: 以上程序是計數(shù)器的頂層 VHDL 描述, 計時器執(zhí)行計時功能,計時的方法是對標準時鐘脈沖計數(shù)。計數(shù)器由四個十進制計數(shù)器和兩個六進制計數(shù)器構(gòu)成,其中毫秒位、十毫秒位、秒位和分位采用十進制計數(shù)器,十秒位和十分位采用六進制計數(shù)器。為了達到連接底層元件形成更高層次的電路設計結(jié)構(gòu),文件使用了元件例化語句。文件在實體中首先定義了計數(shù)器 頂層設計文件的端口信號, 然后在 architecture和 BEGIN 之間利用 COMPONENT 語句對準備調(diào)用的元件作了聲明,并定義了 A,B,C,D,E,F,G,H 八個信號作為器件內(nèi)部的連接線。最后利用端口映射語句 PORT MAP()將六個 十進制計數(shù)器和兩個六個進制計數(shù)第 10 頁 〈 共 20 頁 〉 器連接起來構(gòu)成一個完整的計數(shù)器。(詳細功能見仿真圖的分析) 顯示模塊的 VHDL 源程序 數(shù)據(jù)選擇器的 VHDL 源程序( ) ENTITY MULX IS PORT(CLK,CLR,EN: IN STD_LOGIC。 OUTBCD: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)。 S_10MS: IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 S_100MS: IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 S_1S: IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 S_10S: IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 S_1MIN: IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 S_10MIN: IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 HOUR: IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 S_1MS: IN STD_LOGIC_VECTOR(3 DOWNTO 0)。 SEG: OUT STD_LOGIC_VECTOR(7 DOWNTO 0))。 END MULX。 architecture ART OF MULX IS SIGNAL COUNT:STD_LOGIC_VECTOR(3 DOWNTO 0)。 BEGIN PROCESS(CLK) BEGIN PROCESS(CLK) BEGIN IF CLR=39。139。 THEN COUNT=1111。 ELSIF RISING_EDGE(CLK) THEN IF EN=39。139。 THEN IF COUNT=1001 THEN COUNT=0000。 ELSE COUNT=COUNT+39。139。 END IF。 END IF。 END IF。 END PROCESS。 第 11 頁 〈 共 20 頁 〉 PROCESS(CLK) BEGIN IF CLK39。EVENT AND CLK=39。139。 THEN CASE COUNT IS WHEN 0000=OUTBCD=S_1MS。 SEG=11111110。 WHEN 0001=OUTBCD=S_10MS。 SEG=11111101。 WHEN 0010=OUTBCD=S_100MS。 SEG=11111011。 WHEN 0011=OUTBCD=S_1S。 SEG=11110111。 WHEN 0100=OUTBCD=S_10S。 SEG=11101111。 WHEN 0101=OUTBCD=S_1MIN。 SEG=11011111。 WHEN 0110=OUTBCD=S_10MIN。 SEG=10111111。 WHEN 0111=OUTBCD=HOUR。 SEG=011