使用VHDL設計—向上&向下計數器 通訊一甲 B09622048 楊穎穆
目錄 目的 設計原理 程式 實驗結果 參考資料
目的 題目一: 1. 使用VHDL設計一個向上計數器電路 此電路有RESET功能 RESET時計數器輸出為"0000" CLOCK輸入後向上計數 學號尾數為0與5者做除11 學號尾數為1與6者做除12 學號尾數為2與7者做除13 學號尾數為3與8者做除14 學號尾數為4與9者做除15 2. 將電路加以模擬 3. 將程式燒錄到IC執行 4. 將以上原理撰寫成PPT格式報告交出 5. 將以上原理與操作過程講述一便並錄製成影音檔交出
題目二: 1. 使用VHDL設計一個BCD向下計數器電路 此電路有RESET功能 RESET時計數器輸出為BCD 99="10011001" CLOCK輸入後向下計數 2. 將電路加以模擬 3. 將程式燒錄到IC執行 4. 將以上原理撰寫成PPT格式報告交出 5. 將以上原理與操作過程講述一便並錄製成影音檔交出
設計原理 計數器主要可分為向上&向下計數器。 5 5 4 1 4 1 3 2 3 2 向上計數器 向下計數器
程式(1) library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity mode14 is --電路內部要做的電路名稱 port( --接腳 reset,clock: in std_logic; --輸入腳為reset,clock op : buffer std_logic_vector(3 downto 0) --op為緩衝儲存器,內部有四個位元 ); end;
architecture behav of mode14 is --電路內部結構 begin process(reset,clock,op) --處理影響內部的輸入訊號reset,clock,op if(reset='0') then op<="0000"; --當reset='0'時,"0000"會搬入op,從0開始計數 else if(clock'event and clock='1')then --判別clock此訊號是否由'0'--->'1'的上昇緣 if(op="1101")then op<="0000"; --判別計數器輸出是否已經是'13',則設定輸出由'0'開始 else op<=op+'1'; --不是,則計數器輸出繼續加'1' end if; --結束 if 程式 end if; --結束 if 程式 end if; --結束 if 程式 end process; --結束 process 程式 end behav; --程式結束
程式(2) library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity mode99 is --電路內部要做的電路名稱 port( --接腳 reset,clock: in std_logic; --輸入腳為reset,clock op: buffer std_logic_vector(7 downto 0) --op為緩衝儲存器,內部有八個位元 ); end;
architecture behav of mode99 is --電路內部結構 begin process(reset,clock,op) --處理影響內部的輸入訊號reset,clock,op if(reset='0') then op<="10011001"; --當reset='0'時,"10011001"會搬入op,從99開始向下計數 else if(clock'event and clock='1')then --判別clock此訊號是否由'0'--->'1'的上昇緣 if (op(3 downto 0)="0000")then op(3 downto 0)<="1001"; --判別計數器前四位元輸出是否已經是'0',則設定輸出由'9'開始向下計數 if (op(7 downto 4)="0000")then op(7 downto 4)<="1001"; --判別計數器後四位元輸出是否已經是'0',則設定輸出由'9'開始向下計數 else op(7 downto 4)<=op(7 downto 4)-'1'; --不是,則計數器後四位元輸出繼續減'1',向下計數 end if; --結束 if 程式 else op(3 downto 0)<=op(3 downto 0)-'1'; --不是,則計數器前四位元輸出繼續減'1',向下計數 end if; --結束 if 程式 end if; --結束 if 程式 end if; --結束 if 程式 end process; --結束 process 程式 end behav; --程式結束
實驗結果(1)--向上計數器電路 當我們reset為‘1’時,按下clock鍵,輸出會顯示為“0001”,向上開始計數。
實驗結果(2) 當我們reset為‘1’時,按下clock鍵,輸出會顯示為“1001”,向上開始計數。
實驗結果(3)--向下計數器電路 當我們reset為‘1’時,按下clock鍵,輸出會顯示為“10011001”,向下開始計數。
實驗結果(4) 當我們reset為‘1’時,按下clock鍵,輸出會顯示為“10010000”,向下開始計數。
參考資料 主要的資料內容是參考王志湖老師上課所教授的內容及“數位邏輯”這本書。
END