eda課程設計洗衣機
A. eda設計具有數字顯示的洗衣機時控電路
這個不難,主要是線路板的設計以及元器件的設計,需要的話找我
B. 你那份eda課程設計,就是洗衣機程序。最後是如何生成頂層文件的求幫助!!!
這個 貌似EDA技術後面書上有的?洗衣機程序……
C. eda 洗衣機控制器程序
這個程序沒有什麼錯誤的,,你調試下
D. EDA課程設計,用VHDL編程做計程車計費器
課程設計內容與要求
1,用開關按鍵表示脈沖,每個脈沖代表100米,10個脈沖1公里,每公里1.4元,能同步顯示里程和費用;
2,低於2公里5元計費,高於2公里總費用=起步費用+(里程-2公里)*里程單價+
等候時間*等後單價;
3,等候時間大於2分鍾,按每分鍾1.3元計費;
4,可以設定起步價和里程單價。
一、設計原理與技術方法:
包括:電路工作原理分析與原理圖、元器件選擇與參數計算、電路調試方法與結果說明;
軟體設計說明書與流程圖、軟體源程序代碼、軟體調試方法與運行結果說明。
根據設計要求,系統的輸入信號clk,計價開始信號start,等待信號stop,里程脈沖信號fin。系統的輸出信號有:總費用數C0—c3,行駛距離k0—k1,等待時間m0—m1等。系統有兩個脈沖輸入信號clk_750k,fin,其中clk_750k將根據設計要求分頻成14hz,15hz和1hz分別作為公里計費和超時計費的脈沖。兩個控制輸入開關start,stop;控制過程為:start作為計費開始的開關,當start為高電平時,系統開始根據輸入的情況計費。當有乘客上車並開始行駛時,fin脈沖到來,進行行駛計費,此時的stop需要置為0;如需停車等待,就把stop變為高電平,
並去除fin輸入脈沖,進行等待計費;當乘客下車且不等待時,直接將start置為0,系統停止工作;價格開始歸為起步價5.0元。
整個設計由分頻模塊,計量模塊,計費模塊,控制模塊和顯示模塊五個部分組成。
其中計量模塊是整個系統實現里程計數和時間計數的重要部分;控制模塊是實現不同計費方式的選擇部分,根據所設計的使能端選擇是根據里程計費還是根據等待時間計費,同時設計通過分頻模塊產生不同頻率的脈沖信號來實現系統的計費。計量模塊採用1hz的驅動信號,計費模塊採用14hz,13hz的驅動信號;計量模塊每計數一次,計量模塊就實現14次或者13次計數,即為實現計時的1.3元/min,計程時的1.4元/km的收費。組成框圖如下所示:
1.百進制模塊:
實現百米脈沖的驅動信號,元件框圖如圖3所示:
圖3 百進制模塊框圖
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity jin is
port(start,clk2: in std_logic; --秒脈沖
a: out std_logic_vector(3 downto 0));
end jin;
architecture rt1 of jin is
signal count_1:std_logic_vector(3 downto 0);
begin
a<=count_1;
process(start,clk2)
begin
if(start='0')then
count_1<="0000";
elsif(clk2'event and clk2='1')then
if(count_1="0111")then
count_1<="0000";
else
count_1<=count_1+'1';
end if;
end if;
end process;
end rt1
2.計費模塊
; 實現里程和等候時間的計費並輸出到顯示,元件框圖4如下:
圖4 計費模塊框圖
源程序如下:
Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity jifei is
port(clk2:in std_logic; --計費驅動信號
start:in std_logic; --計費開始信號
c0,c1,c2,c3:buffer std_logic_vector(3 downto 0));
end jifei;
architecture rt1 of jifei is
begin
process(clk2,start)
begin
if start='0'then c3<="0000";c2<="0000";c1<="0101";c0<="0000"; --起步價5元
elsif clk2'event and clk2='1'then
if c0="1001" then c0<="0000";
if c1="1001" then c1<="0000";
if c2="1001" then c2<="0000";
if c3="1001" then c3<="0000";
else c3<=c3+1;
end if;
else c2<=c2+1;
end if;
else c1<=c1+1;
end if;
else c0<=c0+1;
end if;
end if;
end process;
end rt1;
3.公里模塊
實現歷程的計數和輸出計費脈沖,元件框圖5如下:
圖5 公里模塊框圖
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity gongli is
port(clk1,start: in std_logic; --百米脈沖
k1,k2,k3,k4: out std_logic_vector(3 downto 0); --里程顯示
temp2 : out std_logic);
end gongli;
architecture rt1 of gongli is
signal count_1: std_logic_vector(3 downto 0);
signal count_2: std_logic_vector(3 downto 0);
signal count_3: std_logic_vector(3 downto 0);
signal count_4: std_logic_vector(3 downto 0);
begin
k1<=count_1;
k2<=count_2;
k3<=count_3;
k4<=count_4;
process(start,clk1)
begin
if(start='0')then
count_1<="0000";
count_2<="0000";
count_3<="0000";
count_4<="0000"; ---公里清零
elsif(clk1'event and clk1='1')then
if(count_1="1001")then --公里計數器
count_1<="0000";count_2<=count_2+1;temp2<='1';
if(count_2="1001")then
count_2<="0000";count_3<=count_3+'1';
if(count_3="1001")then
count_3<="0000";count_4<=count_4+'1';
end if;
end if;
else
count_1<=count_1+'1';temp2<='0';
end if;
end if;
end process;
end rt1;
4.輸出模塊
實現所有數據的輸出,元件框圖6如下:
圖6 輸出模塊框圖
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity shuchu is
port(y: in std_logic_vector(3 downto 0);
e: out std_logic_vector(6 downto 0));
end shuchu;
architecture rt1of shuchu is
begin
process
begin
case y is
when"0000"=>e<="0111111";
when"0001"=>e<="0000110";
when"0010"=>e<="1011011";
when"0011"=>e<="1001111";
when"0100"=>e<="1100110";
when"0101"=>e<="1101101";
when"0110"=>e<="1111101";
when"0111"=>e<="0000111";
when"1000"=>e<="1111111";
when"1001"=>e<="1100111";
when others=>e<="0000000";
end case;
end process;
end rt1;
5.顯示模塊
實現所有數據的顯示,元件框圖7如下:
圖7 顯示模塊框圖
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity xianshi is
port(start: in std_logic;
a:in std_logic_vector(3 downto 0); --選擇信號
c1,c2,c3,c4,out1,out2,out3,out4:in std_logic_vector(3 downto 0); --里程顯示,時間顯示輸入
y:out std_logic_vector(3 downto 0)); --里程顯示,時間顯示輸出
end xianshi;
architecture rt1 of xianshi is
begin
process
begin
if(start='0')then
y<="0000";
else case a is
when "0000"=> y<=c1 ;
when "0001"=> y<=c2 ;
when "0010"=> y<=c3 ;
when "0011"=> y<=c4 ;
when "0100"=> y<=out1 ;
when "0101"=> y<=out2;
when "0110"=> y<=out3 ;
when "0111"=> y<=out4;
when others =>y<= "0000";
end case;
end if;
end process;
end rt1;
6.dian模塊
圖8 dian模塊框圖
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity dian is
port(a: in std_logic_vector(3 downto 0);
e: out std_logic);
end dian;
architecture rt1 of dian is
begin
process
begin
case a is
when "0001"=>e<='1';
when "0101"=>e<='1';
when others=>e<='0';
end case;
end process;
end rt1;
三、中各個模塊設計分析
系統總體頂層框圖如下:
系統總體頂層框圖
程序最終功能實現波形模擬
1. 分頻模塊
由於實驗箱上沒有14hz和13hz的整數倍時鍾信號,因此採用頻率較大的750khz進行分頻,以近似得到14hz,13hz和1hz的時鍾頻率。通過以上三種不同頻率的脈沖信號實行計程車行駛,等待兩種情況下的不同計費。模塊元件如下:
分頻模塊框圖
源程序如下:
Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity fenpin is
port(clk_750k:in std_logic; --系統時鍾
clk_14:buffer std_logic; --14分頻
clk_13:buffer std_logic; --13分頻
clk_1 : buffer std_logic); --1分頻
end fenpin ;
architecture rt1 of fenpin is
signal q_14:integer range 0 to 53570; --定義中間信號量
signal q_13:integer range 0 to 57691;
signal q_1:integer range 0 to 749999;
begin
process(clk_750k)
begin
If(clk_750k' event and clk_750k='1')then
If q_14=53570 then q_14<=0;clk_14<=not clk_14;
else q_14<=q_14+1;
end if; --得14hz頻率信號
If q_13=57691 then q_13<=0;clk_13<=not clk_13;
else q_13<=q_13+1;
end if; --得13hz頻率信號
If q_1=749999 then q_1<=0;clk_1<=not clk_1;
else q_1<=q_1+1;
end if; --得1hz頻率信號
end if;
end process;
end rt1;
2. 計量模塊
計量模塊主要完成計時和計程功能。
計時部分:計算乘客的等待累積時間,當等待時間大於2min時,本模塊中en1使能信號變為1;當clk1每來一個上升沿,計時器就自增1,計時器的量程為59min,滿量程後自動歸零。
計程部分:計算乘客所行駛的公里數,當行駛里程大於2km時,本模塊中en0使能信號變為1;當clk每來一個上升沿,計程器就自增1,計程器的量程為99km,滿量程後自動歸零。
元件框圖為:
計量模塊框圖
計量模塊模擬波形為:
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity jiliang is
port(start:in std_logic; --計費開始信號
fin:in std_logic; --里程脈沖信號
stop:in std_logic; --行駛中途等待信號
clk1:in std_logic; --驅動脈沖
en1,en0:buffer std_logic; --計費單價使能信號
k1,k0:buffer std_logic_vector(3 downto 0); --行駛公里計數
m1,m0:buffer std_logic_vector(3 downto 0)); --等待時間計數
end jiliang;
architecture rt2 of jiliang is
signal w:integer range 0 to 59; --計時范圍0~59
begin
process(clk1)
begin
if(clk1'event and clk1='1')then
if start='0' then
w<=0;en1<='0';en0<='0';m1<="0000";
m0<="0000";k1<="0000";k0<="0000";
elsif stop='1' then --計時開始信號
if w=59 then
w<=0;
else w<=w+1;
end if;
if m0="1001" then
m0<="0000";
if m1="0101" then
m1<="0000";
else m1<=m1+1;
end if;
else m0<=m0+1;
end if;
if stop='1' then en0<='0';
if m1&m0>"00000001" then en1<='1'; --若等待時間大於2min則en1置1
else en1<='0';
end if;
end if;
elsif fin='1' then --里程計數開始
if k0="1001" then k0<="0000";
if k1="1001" then k1<="0000"; --計程范圍0~99
else k1<=k1+1;
end if;
else k0<=k0+1;
end if;
if stop='0' then
en1<='0';
if k1&k0>"00000001" then
en0<='1'; --若行使里程大於2km,則en0置1
else en0<='0';
end if;
end if;
end if;
end if;
end process;
end rt2;
3. 控制模塊
本模塊主要是通過計量模塊產生的兩個不同的輸入使能信號en0,en1,對每個分頻模塊輸出的14hz,13hz的脈沖進行選擇輸出的過程;本模塊實現了雙脈沖的二選一;最終目的為了計費模塊中對行駛過程中不同的時段進行計價。
模塊元件如下:
控制模塊框圖
控制模塊模擬波形為:
源程序如下:
Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity kong is
port(en0,en1:in std_logic; --使能選擇信號
clk_in1:in std_logic; --14分頻輸入信號
clk_in2:in std_logic; --13分頻輸入信號
clk_out:out std_logic); --輸出信號
end kong;
architecture rt3 of kong is
begin
process(en0,en1)
begin
if en0='1' then --實現二選一功能
clk_out<=clk_in1;
elsif en1='1' then
clk_out<=clk_in2;
end if;
end process;
end rt3;
4.計費模塊
當計費信號start一直處於高電平即計費狀態時,本模塊根據控制模塊選擇出的信號從而對不同的單價時段進行計費。即行程在2km內,而且等待累計時間小於2min則為起步價5元;2km外以每公里1.4.元計費,等待累積時間超過2min則按每分鍾1.3元計費。c0,c1,c2,c3分別表示費用的顯示。
模塊元件為:
計費模塊框圖
計費模塊模擬波形為:
源程序如下:
Library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
use IEEE.std_logic_unsigned.all;
entity jifei is
port(clk2:in std_logic; --計費驅動信號
start:in std_logic; --計費開始信號
c0,c1,c2,c3:buffer std_logic_vector(3 downto 0));
end jifei;
architecture rt4 of jifei is
begin
process(clk2,start)
begin
if start='0'then c3<="0000";c2<="0000";c1<="0101";c0<="0000"; --起步價5元
elsif clk2'event and clk2='1'then
if c0="1001" then c0<="0000";
if c1="1001" then c1<="0000";
if c2="1001" then c2<="0000";
if c3="1001" then c3<="0000"; --計價范圍0~999.9
else c3<=c3+1;
end if;
else c2<=c2+1;
end if;
else c1<=c1+1;
end if;
else c0<=c0+1;
end if;
end if;
end process;
end rt4;
5.顯示模塊
顯示模塊完成計價,計時和計程數據顯示。計費數據送入顯示模塊進行解碼,最後送至以百元,十元,元,角為單位對應的數碼管上顯示。計時數據送入顯示模塊進行解碼,最後送至以分為單位對應的數碼管上顯示。計程數據送入顯示模塊進行解碼,最後送至以km為單位的數碼管上顯示。
模塊元件為:
顯示模塊框圖
源程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all; --定義庫包
entity xianshi is --定義實體
port(
clk_scan:in std_logic; --掃描時鍾信號埠設置
c3,c2,c1,c0:in std_logic_vector(3 downto 0); --總費用輸入埠
k0,k1:in std_logic_vector(3 downto 0); --里程輸入埠
m0,m1:in std_logic_vector(3 downto 0); --等待時間輸入埠
sel:out std_logic_vector(2 downto 0); --控制數碼管位選信號的掃描信號輸出埠
led:out std_logic_vector(6 downto 0); --數碼管的控制埠
led_dp:out std_logic --數碼管的小數點輸出埠
);
end xianshi;
architecture rt5 of xianshi is
signal an:std_logic_vector(6 downto 0); --數碼顯示管中間變數
signal shuju:std_logic_vector(3 downto 0); --選擇輸入端的中間變數
signal cnt:std_logic_vector(2 downto 0); --控制數碼管的中間變數
signal xiaodian:std_logic; --小數點的中間變數
begin
process(clk_scan) --開始進程
begin
if clk_scan'event and clk_scan='1' then
cnt<=cnt+1; --每有一個掃描信號上升沿實現加1掃描
end if;
end process; --結束進程
process(cnt) --開始進程(選擇掃描顯示數碼管)
begin
case cnt is --掃描時給每個數碼管賦值
when "000"=>shuju<=c0;
when "001"=>shuju<=c1;
when "010"=>shuju<=c2;
when "011"=>shuju<=c3;
when "100"=>shuju<=k0;
when "101"=>shuju<=k1;
when "110"=>shuju<=m0;
when "111"=>shuju<=m1;
when others=> null;
end case;
if (cnt="001" or cnt="110")
then xiaodian<='1'; --在里程和總費用的個位處顯示小數點
else xiaodian<='0';
end if;
end process; --結束進程
process(shuju) --開始進程(解碼顯示)
begin
case shuju is
when "0000"=>an<="0111111"; --0
when "0001"=>an<="0000110"; --1
when "0010"=>an<="1011011"; --2
when "0011"=>an<="1001111"; --3
when "0100"=>an<="1100110"; --4
when "0101"=>an<="1101101"; --5
when "0110"=>an<="1111101"; --6
when "0111"=>an<="0000111"; --7
when "1000"=>an<="1111111"; --8
when "1001"=>an<="1101111"; --9
when others=>null;
end case;
end process;
sel<=cnt;
led<=an;
led_dp<=xiaodian;
end rt5;
二、課程設計工作記錄:
包括:設計步驟與時間安排、調試步驟與時間安排、課題完成結果說明
2.課題完成結果說明:
此計費器能實現起步價是5元;實現實驗要求的1公里計費一次單價,行駛公里大於2km時每公里按1.4元計費並能顯示里程和總共的費用。當行駛了6公里,等待了4分鍾時,費用顯示為15.8元。與計算公式總費用=起步費用+(里程-2公里)*里程單價+等候時間*等後單價;即15.8=5+(6-2)*1.4+4*1.3。實驗結果與理論結果完全一致,實驗設計成功。
E. 急求,EDA課程設計。
基於VHDL的多功能數字鍾的設計
EDA課程設計
資料類別
課程(專業)
EDA
適用年級
大學版
文件格式
word+DLS
文件大小
1725K
上傳時權間
2008-10-10
20:57:00
預覽文件
無(只能預覽文件中的部分內容)
下載次數
0
內容簡介:
EDA課程設計
基於VHDL的多功能數字鍾的設計,共11頁,6086字,附源程序。
摘要:介紹了利用VHDL硬體描述語言設計的多功能數字鍾的思路和技巧。在MAX+PLUSII開發
環境中編譯和模擬了所設計的程序,並在可編程邏輯器件上下栽驗證。模擬和驗證結果表明,該設計方法切實可行。
關鍵詞:數字鍾;硬體描述語言;VHDL;MAX+PLUSII。
相關說明:
1、欲下載本站資料,必須成為本站會員。如果你尚未注冊或登錄,請首先注冊或登錄。
2、48小時內下載同一文件,不重復扣金幣。
3、下載後請用WinRAR或
WinZIP解壓縮後使用。
4、下載後仍有問題,請看常見問題解答。
F. 乒乓球游戲機 eda設計 1) 用8個發光二極體表示球;用兩個按鈕分別表示甲乙兩個球員的球拍
『數字電路』課程設計指導書
一、 教學目標
(一)課程性質
課程設計。
(二)課程目的
訓練學生綜合運用學過的數字電路的基本知識,設計比較復雜的數字電路的能力。
二、教學內容基本要求及學時分配
(一) 課程設計題目
題目見附錄I,原則上每人一題。
(二) 設計內容
拿到題目後首先進行電路設計。然後在微機上進行原理圖輸入、編譯和軟體模擬,如滿足設計要求,再進行下載和硬體實驗。如硬體實驗結果不滿足要求,則修改設計,直到滿足要求為止。
(三) 設計要求
(1) 按題目要求的邏輯功能進行設計,電路各個組成部分須有設計說明;
(2) 必須採用原理圖輸入法;
(3) 軟體模擬完成後,必須經教師允許方可進行下載;
(四) 使用的硬體和軟體
硬體為可編程邏輯器件EPMS;軟體為MAX+PLUSII。見附錄。
三、主要教學環節
(一)設計安排
1. 課程設計時間為兩周,每人一台微機;
2. 第1、2天講授設計需要的硬體和軟體、設計的要求、布置設計題目;
3. 第3~8天學生進行設計;
4. 第9、10天教師驗收,然後學生撰寫和列印設計報告。
(二)指導與答疑
每天都有教師現場答疑,學生有疑難問題可找教師答疑。學時應充分發揮主觀能動性,不應過分依賴教師。
(三)設計的考評
設計全部完成後,須經教師驗收。驗收時學生要講述自己設計電路的原理、模擬情況,還要演示硬體實驗結果。
教師根據學生設計全過程的表現和驗收情況給出成績。
四、課程設計報告的內容和要求
(一)課程設計報告的內容
按附錄中給出 的報告模板進行編寫,用A4紙列印,左側裝訂。
(二)課程設計報告編寫的基本要求
(1)按設計指導書中要求的格式書寫,所有的內容一律列印;
(2)報告內容包括設計過程、軟體模擬的結果及、硬體模擬結果及;
(3)要有整體電路原理圖、各模塊原理圖;
(4) 軟體模擬包括各個模塊的模擬和整體電路的模擬,對模擬必須要有必要的說明;
(5) 硬體模擬要給出各個輸入的具體波形和輸出的測試結果。
附錄I EDA課程設計參考題目
注:在以下設計中只可以用一個參考時鍾
一、數碼管顯示控制器
要求:
1.能自動一次顯示出數字 0、1、2、3、4、5、6、7、8、9(自然數列),1、3、5、7、9(奇數列), 0、2、4、6、8(偶數列),0、1、2、3、4、5、6、7、0、1(音樂符序列);然後再從頭循環;
2.打開電源自動復位,從自然數列開始顯示。
二、乒乓球游戲機
要求:
1.用8個發光二極體表示球;用兩個按鈕分別表示甲乙兩個球員的球拍;
2.一方發球後,球以固定速度向另一方運動(發光二極體依次點亮),當球達到最後一個發光二極體時,對方擊球(按下按鈕)球將向相反方向運動,在其他時候擊球視為犯規,給對方加1分;都犯規,各自加1分;
3.甲、乙各有一數碼管計分;
4.裁判有一個按鈕,是系統初始化,每次得分後, 按下一次。
三、智力競賽搶答器
要求:
1.五人參賽每人一個按鈕,主持人一個按鈕, 按下就開始;
2.每人一個發光二極體,搶中者燈亮;
3.有人搶答時,喇叭響兩秒鍾;
4.答題時限為10秒鍾,從有人搶答開始,用數碼管倒計時間,0、9、8…1、0;倒計時到0的時候,喇叭發出兩秒聲響。
四、數字鍾
要求:
1.輸入10HZ的時鍾;(提示:對已有kHz頻率時鍾進行分頻)
2.能顯示時、分、秒,24小時制;
4.時和分有校正功能;
5.整點報時,喇叭響兩秒;
6.可設定夜間某個時段不報時;
注意:硬體資源的節約,否則器件內資源會枯竭。
五、交通燈控制器
要求:
1.東西方向為主幹道,南北方向為副幹道;
2.主幹道通行40秒後,若副幹道無車,仍主幹道通行,否則轉換;
4.換向時要有4秒的黃燈期;
5.南北通行時間為20秒,到時間則轉換,若未到時,但是南北方向已經無車,也要轉換。
6.附加:用數碼管顯示計時。
六、雙鈕電子鎖
要求:
1. 有兩個按鈕A和B,開鎖可自設,如(3、5、7、9);
2. 若按B鈕,則門鈴響;(滴、嗒…);
3. 開鎖過程:按3下A,按一下B,則中的「3」即被輸入;接著按5下A,按一下B,則輸入「5」;依此類推,直到輸入完「9」,按B,則鎖被打開--用發光管KS表示;
4. :在輸入3、5、6、9過程後,如果輸入與不同,則;用發光管表示,同時發出「嘟、嘟……的聲音;
5. 用一個開關表示關門(即閉鎖)。
七、彩燈控制器二
要求:
1.有十隻LED,L0……L9
2.顯示方式
①先奇數燈依次滅
②再偶數燈依次滅
③再由L0到L9依次滅
3.顯示間隔0.5S,1S可調。
八、速度表
要求:
1.顯示汽車Km/h數;
2.車輪每轉一圈,有一感測脈沖;每個脈沖代表1m的距離;
3.采樣周期設為10S;
4.要求顯示到小數點後邊兩位;
5.用數碼管顯示;
6,最高時速小於Km/h。
九、彩燈控制器一
要求:
1.有八隻LED,L0……L7
2.顯示順序如下表
3.顯示間隔為0.25S,0.5S,1S,2S可調。
序 L0 L1 L2 L3 L4 L5 L6 L7
0 1 1 1 1 1 1 1 0
1 0 1 1 1 1 1 1 1
2 1 0 1 1 1 1 1 1
3 1 1 0 1 1 1 1 1
4 1 1 1 0 1 1 1 1
5 1 1 1 1 0 1 1 1
6 1 1 1 1 1 0 1 1
7 1 1 1 1 1 1 0 1
8 1 1 1 1 1 1 1 0
9 1 1 1 1 1 1 1 1
10 0 1 1 1 1 1 1 1
11 0 0 1 1 1 1 1 1
12 0 0 0 1 1 1 1 1
13 0 0 0 0 1 1 1 1
14 0 0 0 0 0 1 1 1
15 0 0 0 0 0 0 1 1
16 0 0 0 0 0 0 0 1
17 0 0 0 0 0 0 0 0
18 1 0 0 0 0 0 0 0
19 1 1 0 0 0 0 0 0
20 1 1 1 0 0 0 0 0
21 1 1 1 1 0 0 0 0
22 1 1 1 1 1 0 0 0
23 1 1 1 1 1 1 0 0
24 1 1 1 1 1 1 1 0
25 1 0 0 0 0 0 0 0
26 0 1 0 0 0 0 0 0
27 0 0 1 0 0 0 0 0
28 0 0 0 1 0 0 0 0
29 0 0 0 0 1 0 0 0
30 0 0 0 0 0 1 0 0
31 0 0 0 0 0 0 1 0
32 0 0 0 0 0 0 0 1
十、計程車計價器
要求:
1.5 Km起計價,起始價5元,每公里1.2元;
2.感測器輸出脈沖為0.5m/個;
3.每0.5km改變一次顯示,且提前顯示(只顯示錢數)。
十一、八音電子琴
要求:
1.能發出1、2、3、4、5、6、7、1八個音;
2.用按鍵作為鍵盤;
3.C調到B調對應頻率為。
調 頻率(HZ)
.63*2
B .88
A .00
G .00
F .23
E .63
D .66
C .63
十二、自動奏樂器一
要求:
1.開機能自動奏一個樂曲,可以反復演奏;
2.速度可變。
1 1 5 5 6 6 5 –
4 4 3 3 2 2 1 –
5 5 4 4 3 3 2 –
5 5 4 4 3 3 2 –
3.附加:顯示樂譜。
十三、自動奏樂器二
要求:
1.開機能自動奏一個樂曲,可以反復演奏;
2.速度可變。
1 3 1 3 5 6 5 – 6 6 6 5 – – –
6 6 6 5 5 3 1 2 2 3 2 1 – – –
3.附加:顯示樂譜。
十四、自動打鈴器
要求:
1.有數字鍾功能;(不包括校時等功能)
2.可設置六個時間,定時打鈴;
3.響鈴5秒鍾。
十五、 數字頻率計
要求:
1.輸入為矩形脈沖,頻率范圍0~99MHz;
2.用五位數碼管顯示;只顯示最後的結果,不要將計數過程顯示出來;
3.單位為Hz和KHz兩檔,自動切換。
十六、算術運算單元ALU的設計
要求:
1.進行兩個四位二進制數的運算。
2.算術運算:A+B,A-B,A+1,A-1
3.邏輯運算:A and B,A or B,A not, A xor B
注意:從整體考慮設計方案,優化資源的利用
十七、游戲機,有三位數碼管顯示0-7之間的數碼,按下按鈕,三個數碼管循環顯示,抬起按鈕,顯示停止,當顯示內容相同時,為贏
要求:
1.三個數碼管循環顯示的速度不同
2.停止時的延遲時間也要不同
3.如果贏了游戲時,要有數碼管或LED的花樣顯示或聲音提示。
十八、路數顯器
要求:
1.設計16路數顯器,16路中某一路斷開時(可用高低電平表示斷開和接通),用十進制數顯示該路編,並發出聲音;
2.時間持續10秒鍾;
3.當多路時,要有優先順序,並將低優先順序的存儲,處理完高優先順序後,再處理之(附加)。
十九、脈沖按鍵按鍵顯示器
要求:
1.設計一個具有八位顯示的按鍵顯示器;
2.能准確反映按鍵數字;
3.顯示器顯示從低位向高位前移,逐位顯示,最低位為當前輸入位;
4.重按鍵時,能首先清除顯示;
5.摘下話機後才能撥有效,掛機後熄滅顯示。
二十、病呼叫系統
要求:
1.用1~5個開關模擬5個病的呼叫輸入,1優先順序最高;1~5優先順序依次降低;
2.用一個數碼管顯示呼叫的碼;沒呼叫時顯示0;又多個呼叫時,顯示優先順序最高的呼叫(其它呼叫用指示燈顯示);
3.凡有呼叫發出5秒的呼叫聲;
4.對低優先順序的呼叫進行存儲,處理完高優先順序的呼叫,再進行低優先順序呼叫的處理(附加)。
二十一、自動電子鍾
要求:
1.用24小時制進行時間顯示;
2.能夠顯示小時、分鍾;
3.每秒鍾要有秒閃爍指示;
4.上電後從「00:00」開始顯示。
二十二、具有數字顯示的洗衣機時控電路
要求:
1.洗衣機工作時間可在1~15分鍾內任意設定(整分鍾數);
2.規定電動機運行規律為正轉20s、停10s、反轉20s、停10s、再正轉20s,以後反復運行;
3.要求能顯示洗衣機剩餘工作時間,每當電機運行一分鍾,顯示計數器自動減1,直到顯示器為「0」時,電機停止運轉;
4.電機正轉和反轉要有指示燈指示。
二十三、籃球比賽數字計分牌
要求:
1.分別記錄兩隊得分情況;
2.進球得分加2分,罰球進球得分加1分;
3.糾正錯判得分減2分或1分;
4.分別用三個數碼管顯示器記錄兩隊的得分情況。
二十四、電子日歷
要求:
1.能顯示年、月、日,星期;
2.例如:「01.11.08 6」,星期日顯示「8」;
3.年月日,星期可調;
4.不考慮閏年。
二十五、用電器電源自動控制電路
要求:
1.控制電路能使用電器的電源自動開啟30s,然後自動關閉30s,如此周而復始的工作,要有工作狀態指示;
2.當電源接通時,可隨時採用手動方式切斷電源;當電源切斷時,可隨時採用手動方式接通電源;
3.若手動接通,可由定時斷開,然後進入自動運行狀態,反之亦然
4.定時范圍0分~60分,要有分秒的倒計時顯示。
二十六、設計模擬廣播電台報時電路
要求:
1.當計時器運行到59分49秒開始報時,每鳴叫1s就停叫1s,共鳴叫6響;前5響為低音,頻率為Hz;最後1響為高音,頻率為1KHz;
2.至少要有分秒顯示。
二十七、數字跑表
要求:
1.具有暫停/啟動功能;
2.具有重新開始功能;
3.用6個數碼管分別顯示百分秒、秒和分鍾。
二十八、數字電壓表
要求:
1.0-5輸入;
2.用3個數碼管顯示;有小數點的顯示;顯示小數後兩位數,如0.01;只顯示最後結果,不要顯示中間結果。
提示:實驗箱提供了8bits的DAC -AD和比較器-LMN。
硬之城有這個型號的 可以去看看有這方面的資料么
G. EDA 課程設計 ——拔河游戲機
一、總體設計思想
電子拔河游戲機是一種能容納甲乙雙方參賽游戲電路。由一排發光二極體表示拔河的「電子繩」。由甲乙雙方通過按紐開關使發光二極體向一方的終點延伸,當延伸到某方的最後一個發光二極體時, 則該方獲勝,連續比賽多局以定勝負。
1.基本原理
本電路要求使用9個發光二極體,開機後只有中間一個發亮,此即拔河的中心點。游戲雙方各持一個按鈕,迅速地、不斷地按動,產生脈沖,誰按得快,亮點就向誰的方向移動,每按一次,亮點移動一次。亮點移到任一方終端二極體時,這一方就獲勝,此時雙方按鈕均無作用,輸出保持,只有復位後才使亮點恢復到中心。最後用數碼管顯示獲勝者的盤數。
由設計內容可知,首先需要一個十進制的計數器,用於對雙方按鈕的次數計數,並通過解碼器顯示在數碼管上。設計要求用50MHz的頻率,而設計用到的是1K Hz的頻率,所以要設計一個程序進行分頻。其次,顯視控制部分設計要求在發光二極體上顯示游戲狀態,雙方每按十次,亮點向先按十次移動一次,對脈沖進行計數,每十次移一位。需接入一個清零端 ,用於復位。再次,運用VHDL程序語言進行各個模塊的程序編寫,控制電路的正常運行。最後,將以上程序組裝起來,就可得到所需要的拔河游戲機
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity bahe is
port (a,b,rst,clk:in std_logic;
sg,led:out std_logic_vector(8 downto 0);
bt:out std_logic_vector(7 downto 0));
end bahe;
----------------------------------
architecture one of bahe is
component cnt10
port (clk,rst,en:std_logic;
cout:out std_logic;
cq:out std_logic_vector(3 downto 0));
end component;
component scan
port (clk :in std_logic;
a1, a2,a3,b1,b2,b3:in std_logic_vector(3 downto 0);
sg:out std_logic_vector(8 downto 0);
bt: out std_logic_vector(7 downto 0));
end component;
component lmov
port (kl ,kr:in std_logic_vector(3 downto 0) ;
led:out std_logic_vector(8 downto 0);
en : out std_logic;
rst:in std_logic);
end component;
signal e,f,ca1,ca2,cb1,cb2:std_logic;
signal cqa1,cqa2,cqa3,cqb1,cqb2,cqb3:std_logic_vector(3 downto 0);
begin
u1: cnt10 port map (en=>e,rst=>rst,clk=>a,cout=>ca1,cq=>cqa1);
u2: cnt10 port map (en=>e,rst=>rst,clk=>ca1,cout=>ca2,cq=>cqa2);
u3: cnt10 port map (en=>e,rst=>rst,clk=>ca2,cq=>cqa3);
u4: cnt10 port map (en=>e,rst=>rst,clk=>b,cout=>cb1,cq=>cqb1);
u5: cnt10 port map (en=>e,rst=>rst,clk=>cb1,cout=>cb2,cq=>cqb2);
u6: cnt10 port map (en=>e,rst=>rst,clk=>cb2,cq=>cqb3);
u7: scan port map (a1=>cqa1,a2=>cqa2,a3=>cqa3,b1=>cqb1,
b2=>cqb2,b3=>cqb3,clk=>clk,sg=>sg,bt=>bt);
u8:lmov port map (en=>e,kl=>cqa2,kr=>cqb2,rst=>rst,led=>led);
end architecture one;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt10 is
port(clk,rst,en:std_logic;
cout:out std_logic;
cq:out std_logic_vector(3 downto 0));
end;
architecture one of cnt10 is
begin
process(clk,rst,en)
variable cqi:std_logic_vector(3 downto 0);
begin
if rst='1' then
cqi:=(others=>'0');
elsif clk'event and clk='1' then
if en='1' then
if cqi<9 then cqi:=cqi+1;
else cqi :=(others=>'0');
end if ;
end if;
end if;
if c qi=9 then cout<='0' ;
else cout<='1';
end if;
cq<=cqi;
end process;
end;
電路的VHDL程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity scan is
port (clk :in std_logic;
a1,a2,a3,b1,b2,b3:in std_logic_vector(3 downto 0);
sg:out std_logic_vector(8 downto 0);
bt: out std_logic_vector(7 downto 0));
end;
architecture one of scan is
signal cnt4:std_logic_vector(2 downto 0);
signal a:std_logic_vector(3 downto 0);
signal clk1:std_logic;
begin
p1:process(cnt4)
begin
case cnt4 is
when "000"=>bt<="10000000";a<=a1;
when "001"=>bt<="01000000";a<=a2;
when "010"=>bt<="00100000";a<=a3;
when "011"=>bt<="00000100";a<=b1;
when "100"=>bt<="00000010";a<=b2;
when "101"=>bt<="00000001";a<=b3;
when others=>bt<="00000000";
end case ;
end process p1;
---------------------------------
p2:process (clk)
variable ct:integer range 0 to 50000;
begin
if clk'event and clk='1' then --1000HZ
if ct<49999 then
ct:=ct+1;
clk1<='0';
else
ct:=0;
clk1<='1';
end if;
end if;
end process p2;
process(clk1)
begin
if clk1'event an d clk1='1' then
if cnt4<5 then
cnt4<=cnt4+1;
else
cnt4<="000";
end if;
end if;
end process;
------------------------------------
process (a)
begin
case a is
when "0000"=>sg<="100000000";
when "0001"=>sg<="111110001";
when "0010"=>sg<="001001000";
when "0011"=>sg<="001100000";
when "0100"=>sg<="000110010";
when "0101"=>sg<="000100100";
when "0110"=>sg<="000000100";
when "0111"=>sg<="111110000";
when "1000"=>sg<="000000000";
when "1001"=>sg<="100011111";
when "1010"=>sg<="000100100";
when "1011"=>sg<="000011000";
when "1100"=>sg<="010001100";
when "1101"=>sg<="001001000";
when "1110"=>sg<="001000000";
when "1111"=>sg<="000011111";
when others=>null;
end case ;
end process;
end;
⑸ 勝負顯示
將雙方終端二極體正極經非門後的輸出分別接到二個CC4518計數器的EN端,CC4518的兩組4位BCD碼分別接到實驗裝置的兩組解碼顯示器的A、B、C、D插口處。當一方取勝時,該方終端二極體發亮,產生一個上升沿,使相應的計數器進行加一計數,於是就得到了雙方取勝次數的顯示,若一位數不夠,則進行二位數的級聯。
⑹ 復位
其VHDL程序如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity lmov is
port (kl ,kr:in std_logic_vector(3 downto 0) ;
led:out std_logic_vector(8 downto 0);
en : out std_logic;
rst:in std_logic);
end ;
architecture one of lmov is
begin
process(rst,kl,kr)
begin
if rst='1' then led<="111101111";en<='1';
elsif kl-kr=1 then led<="111011111";en<='1';
elsif kl-kr=2 then led<="110111111";en<='1';
elsif kl-kr=3 then led<="101111111";en<='1';
elsif kl-kr=4 then led<="011111111";en<='0';
elsif kr-kl=1 then led<="111110111";en<='1';
elsif kr-kl=2 then led<="111111011";en<='1' ;
elsif kr-kl=3 then led<="111111101";en<='1';
elsif kl-kr=4 then led<="111111110";en<='0';
elsif kr-kl=0 then led<="111101111";en<='1';
else null;
end if;
end process;
end;
H. EDA課程設計:彩燈控制器
以前做的設計,粘貼時圖形沒出來,參考一下,記得給分啊
一.設計目的
1、學習EDA開發軟體和MAX+plus Ⅱ的使用方法,熟悉可編程邏輯器件的使用,通過製作來了解彩燈控制系統。
2、進一步掌握數字電路課程所學的知識。
3、了解數字電路設計的一般思路,進一步解決和分析問題。
4、培養自己的編程和謹慎的學習態度
二、.設計題目內容和要求
(1)課題內容:
用EDA技術設計一個彩燈控制器,使彩燈(LED管)能連續發出三種以上不同的花型(自擬);
隨著彩燈顯示圖案的變化,發出不同的音響聲。
要求使用7段數碼管顯示當前顯示的花型,如第一種花型顯示A1,第二種花型顯示b2,第三種花型顯示C3
(2)主要任務:完成該系統的硬體和軟體的設計,並利用實驗箱製作出實物演示,調試好後並能實際運用(指導教師提供製作所需的器件),最後就課程設計本身提交一篇課程設計報告。
三、總體方案設計與選擇
1 總體方案的設計
方案一:電路分為三個部分:彩燈花型模塊、聲音模塊,時鍾模塊。用時鍾控制聲音和花型,整體使用相同的變數與信號,主體框圖如下;
圖三—1-1方案一的的流程圖
方案二:電路分為五個模塊:分頻器模塊、16進制計數器、4進制計數器,4選1選擇器、彩燈控制器。其中彩燈控制器是用來輸出不同的花樣,彩燈控制器的輸出則是用一個16進制的計數器來控制,揚聲器的輸出時用不同的頻率來控制,所以用了一個集成分頻器來使輸入的頻率被分為幾種不同的頻率,不同頻率的選擇性的輸出則是用一個4選一的選擇器來控制。整體框圖如下:
圖三—1-2方案二的流程圖
2、方案的選擇
方案一是將融合在一起,原理思路簡單,元件種類使用少,但是在編程時要使用同一變數和信號,這樣就會給編程帶來很大的困難,另外中間單元連線較多,不容易檢查,門電路使用較多,電路的抗干擾能力會下降。
方案二將彩燈花型控制與聲音控制分開,各單元電路只實現一種功能,電路設計模塊化,且編程時將工作量分開,出現錯誤時較容易檢查,連線較少且容易組裝和調試。
結合兩個方案的優缺點,我選擇容易編程、組裝和調試的方案二。
四、模塊電路的設計
1、分頻器模塊
設計要求顯示不同的彩燈的時候要伴隨不同的音樂,所以設計分頻器來用不同的頻率控制不同的音樂輸出。
模塊說明:
Rst:輸入信號 復位信號 用來復位分頻器的輸出使輸出為「0」,及沒有音樂輸出。
Clk:輸入信號 模塊的功能即為分頻輸入的頻率信號。
Clk_4、clk8、clk_12、clk_16:輸出信號 即為分頻模塊對輸入信號clk的分頻,分別為1/4分頻輸出、1/8分頻輸出、1/12分頻輸出、1/16分頻輸出。不同的頻率會發出不同的聲音。如圖
圖四-1分頻器電路圖
2、16進制計數器
16進制模塊用來控制彩燈輸出模塊,即確定彩燈控制器的不同的輸出。
Rst:輸入信號 復位信號 用來復位16進制使其輸出為「00000」,即彩燈不亮。
Clk1:輸入信號 用來給模塊提供工作頻率。
Count_out[3..0]:輸出信號 即為16進制計數器的輸出,此輸出信號作為彩燈的輸入信號。
如圖四-2
圖四-2 16進制計數器電路圖
3、4進制計數器模塊
4進制計數器作為選擇器的輸入來控制選擇器選擇不同的頻率作為輸出控制揚聲器工作。
Clk2:輸入信號 來為計數器提供工作頻率。
Rst:輸入信號 復位信號 使計數器的輸出為「00」。
如圖四-3
圖四-3 4進制計數器電路圖
4、4選1選擇器模塊
Rst:輸入信號復位信號使選擇器的輸出為「0」。
In1、in2、in3、in4:輸入信號接分頻器的輸出。
Inp[1..0]:輸入信號接4進制計數器的輸出用來控制選擇器的選擇不同的輸入選擇不同的輸出。
Output2:輸出信號直接接揚聲器即輸出的是不同的頻率來控制揚聲器播放聲音
如圖四—4
圖四—4 4選1選擇器電路圖
5、彩燈控制模塊
彩燈控制採用的模式6來進行顯示。
圖四—5—1模式6結構圖
彩燈控制模塊用來直接控制彩燈的輸出,使彩燈表現出不同的花樣。
Rst:輸入信號 使彩燈控制模塊的輸出為「00000000」,即讓彩燈無輸出。
Input[4..0]:輸入信號 不同的輸入使彩燈控制模塊有不同的輸出即彩燈顯示出不同的花樣。
Output3[7..0]:輸出信號 直接與數碼管相連來控制數碼管。
如圖四—5—2
圖四-5-2 彩燈控制電路圖
五、EDA設計與模擬
1、源程序:
----------------------------------------------分頻器模塊-----------------------------------------
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYfenpinqi IS
PORT
(
clk2,rst :IN std_logic;
clk_12,clk_4,clk_16,clk_8 : OUT std_logic
);
ENDfenpinqi;
ARCHITECTUREcd OF fenpinqi IS
begin
p1:process(clk2,rst)
variable a:integer range 0 to 20;
begin
if rst='1' then
clk_4<='0'; ----- 復位信號控制部分
else
if clk2'event and clk2='1'then
if a>=3 then
a:=0;
clk_4<='1';
else
a:=a+1;
clk_4<='0';
end if;
end if;
end if;
endprocess p1;
p2:process(clk2,rst)
variable b:integer range 0 to 20;
begin
if rst='1' then
clk_16<='0'; ----- 復位信號控制部分
else
if clk2'event and clk2='1'then
if b>=15 then
b:=0;
clk_16<='1';
else
b:=b+1;
clk_16<='0';
end if;
end if;
end if;
endprocess p2;
p3:process(clk2,rst)
variable c:integer range 0 to 20;
begin
if rst='1' then
clk_8<='0'; ----- 復位信號控制部分
else
if clk2'event and clk2='1'then
if c>=7 then
c:=0;
clk_8<='1';
else
c:=c+1;
clk_8<='0';
end if;
end if;
end if;
endprocess p3;
p4:process(clk2,rst)
variable d:integer range 0 to 40;
begin
if rst='1' then
clk_12<='0'; ----- 復位信號控制部分
else
if clk2'event and clk2='1'then
if d>=11 then
d:=0;
clk_12<='1';
else
d:=d+1;
clk_12<='0';
end if;
end if;
end if;
endprocess p4;
endcd;
----------------------------------------------4選1選擇器---------------------------------------
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYxzq4_1 IS
PORT
(
rst:in std_logic;
inp:in integer range 0 to 3;
in1,in2,in3,in4 : In std_logic;
output2 :OUT std_logic
);
ENDxzq4_1;
ARCHITECTUREa OF xzq4_1 IS
BEGIN
PROCESS (rst,inp)
BEGIN
if(rst='1') then output2<='0';
else
case inp is
when 0=>output2<=in1;
when 1=>output2<=in2;
when 2=>output2<=in3;
when 3=>output2<=in4;
when others=>null;
end case;
end if;
END PROCESS;
ENDa;
-------------------------------------------彩燈控制模塊----------------------------------------
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYcaideng IS
PORT
(
input :
IN INTEGER RANGE
0 TO 15;
rst:in std_logic;
output3 :OUT std_logic_vector(7 downto 0);
sm :out std_logic_vector(6 downto 0)
);
ENDcaideng;
ARCHITECTUREa OF caideng IS
BEGIN
PROCESS (input)
BEGIN
if rst='1' thenoutput3<="00000000";sm<="0000000";
else
case input is
when 0=>output3<="00111000";sm<="0000110";
when1=>output3<="00001111";sm<="0000110";
when2=>output3<="00111110";sm<="0000110";
when3=>output3<="01111111";sm<="0000110";
when4=>output3<="01011011";sm<="1011011";
when5=>output3<="01110110";sm<="1011011";
when6=>output3<="00001111";sm<="1011011";
when7=>output3<="01111111";sm<="1011011";
when8=>output3<="01101101";sm<="1001111";
when9=>output3<="00000111";sm<="1001111";
when10=>output3<="01110111";sm<="1001111";
when11=>output3<="01111011";sm<="1001111";
when12=>output3<="00111000";sm<="1100110";
when13=>output3<="00111111";sm<="1100110";
when14=>output3<="00111110";sm<="1100110";
when 15=>output3<="01111001";sm<="1100110";
when others=>null;
end case;
end if;
end process;
end a;
--------------------------------------------16進制計數器模塊-----------------------------------
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYcounter_16 IS
PORT
(
clk,rst :IN std_logic;
count_out :
OUT INTEGER RANGE
0 TO 15);
ENDcounter_16;
ARCHITECTUREa OF counter_16 IS
BEGIN
PROCESS (rst,clk)
variable temp:integer range 0 to 16;
BEGIN
IF rst='1' THEN
temp:=0;
ELSIF (clk'event and clk='1') THEN
temp:=temp+1;
if(temp=15) then
temp:=0;
end if;
END IF;
count_out<=temp;
END PROCESS;
ENDa;
-------------------------------4進制計數器模塊----------------------------------
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYcounter_4 IS
PORT
(
clk,rst :IN std_logic;
count_out :OUT integer range 0 to 3 );
ENDcounter_4;
ARCHITECTUREa OF counter_4 IS
BEGIN
PROCESS (rst,clk)
variable temp:integer range 0 to 16;
BEGIN
IF rst='1' THEN
temp:=0;
ELSIF (clk'event and clk='1') THEN
temp:=temp+1;
if(temp=4) then
temp:=0;
end if;
END IF;
count_out<=temp;
END PROCESS;
ENDa;
-------------------------------------------主程序----------------------------------
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYproject IS
PORT (clk1,rst,clk2: IN std_logic;
Out1: OUT std_logic_vector(7 downto 0);
Out2 :out std_logic_vector(6 downto0);
Out3: OUT std_logic);
ENDproject;
ARCHITECTUREstruct OF project IS
COMPONENT counter_16 IS
PORT(clk,rst : IN std_logic;
count_out : OUT integer range 0 to 15 );
ENDCOMPONENT;
COMPONENT fenpinqi IS
PORT(clk2,rst : IN std_logic;
clk_12,clk_4,clk_16,clk_8 : OUT std_logic);
END COMPONENT ;
COMPONENT counter_4 IS
PORT(clk,rst :IN std_logic;
count_out :OUT integer range 0 to 3 );
ENDCOMPONENT;
COMPONENT xzq4_1 IS
PORT
(
rst:in std_logic;
inp:in integer range 0 to 3;
in1,in2,in3,in4 : In std_logic;
output2 :OUT std_logic
);
ENDCOMPONENT;
COMPONENT caideng IS
PORT
(
input: IN INTEGER RANGE 0 TO 15;
rst:in std_logic;
output3 :OUT std_logic_vector(7 downto 0);
sm :out std_logic_vector(6 downto 0)
);
ENDCOMPONENT;
SIGNALu: integer range 0 to 15;
SIGNALw: integer range 0 to 3;
SIGNALv1,v2,v3,v4: std_logic;
BEGIN
U1:counter_16PORT MAP(clk1,rst,u);
U2:fenpinqiPORT MAP(clk2,rst, v1,v2,v3,v4);
U3:counter_4PORT MAP(v3,rst,w);
U4:xzq4_1 PORT MAP(rst,w, v1,v2,v3,v4,out3);
U5:caidengPORT MAP(u,rst,out1,out2);
ENDstruct;
2、彩燈控制器模擬結果及數據分析
分析:如上圖,clk1控制的是彩燈模塊,clk2控制的是聲音模塊,當rst為高電平是輸出全為0,ck1每出現四個高電平,花型發生一次變化,out2分別顯示1、2、3、4,out1顯示不同的花型,out3發出聲音,如圖脈沖數不同表示發出的聲音不同,但是聲音與花型相比有一定的延遲。
六、硬體實現
1、引腳鎖定圖
2、硬體模擬圖
顯示第一組花型之一
顯示第二組花型之一
顯示第三組花型之一
顯示的第四組花型之一
七、總體電路
整個系統就是各個分模塊組成來實現最後的彩燈控制功能,系統又兩個時鍾來控制一個是控制16進制計數器即控制彩燈控制模塊來實現彩燈的不同輸出,另一個時鍾為分頻器的輸入來進行分頻處理,最後用來控制揚聲器發出不同的音樂,為了使效果明顯盡量達到要求分頻處理的時鍾的頻率比實現彩燈控制的時鍾頻率要高。
將各個模塊連在一起採用在課程中學到的元件例化,將各個模塊的引腳連在一起,使之成為一個整體。元件例化是VHDL設計實體構自上而下層次化設計的重要途徑。整體電路如圖五—1
圖七—1 整體電路圖
八、心得體會
1、在設計時遇到一些主要問題如下:怎麼將各個模塊連在一起、開始硬體模擬時總是出現錯誤,設計方案的選擇。最後我選擇了元件例化將各個模塊連在一起,模擬時是因為短路帽接錯了,當時沒有注意,在方案的選擇時我們選了實現比較簡單的分模塊方案
2、這次的EDA課程設計我學到得東西很多明白了理論與實踐之間的差距,而且對DEA課程有了更深入的理解,尤其是知道了怎麼去應用所學的知識,怎麼去利用網路實現自己的要求,具體體會如下:
(1)要想完成編程就要對DEA知識很熟悉,這樣才能加快編程的速度,另外在編程時一定要小心,稍微有一點粗心都會有很多的錯誤出現,在出現錯誤後要學會尋找錯誤原因如名稱前後不一、數據類型不同、符號寫錯等等
(2)拿道題目後要注意分析,要學會總體把握,然後再一一一細化、學會將復雜的問題簡單化,分析時一定要有一個明確的目標。
(3)要學會理論聯系實際,在程序導入到實驗箱後,居然不顯示結果,認真的檢查看看操作是否有錯誤、試驗箱中該短路的是否已用短路帽短路、又重新檢查了一下程序,結果發現是短路帽接錯了,所以看似很簡單的操作自己操作起來可能會有很大的漏洞,所以親自動手是很重要的。
(4)當自己的只是有限時,要注意運用網路等一切資源,要學會知識的靈活運用在查閱的過程中學到了很多在書本所沒有學到的知識,通過查閱相關資料進一步加深了對EDA的了解
總的來說,通過這次課程設計不僅鍛煉了我們的動手和動腦能力,也使我懂得了理論與實際相結合的重要性,只有理論知識是遠遠不夠的,要把所學的理論知識與實踐相結合起來,才能提高自己的實際動手能力和獨立思考的能力。還有最重要的一點就是要有一絲不苟的精神和端正認真的態度,遇到困難後要學會積極的面對。
3、在此設計中聲音會有一定的延遲,可以考慮用花型輸出信號作為4選1的控制信號
九、參考書目:
趙偉軍,《Protel99se教程》,北京,人民郵電出版社,1996年
金西,《VHDL與復雜數字系統設計》,西安,西安電子科技大學出版社,2003
漢澤西,《EDA技術及其應用》,北京,北京航空航天大學出版社,2004
[4] 黃任,《VHDL入門.解惑.經典實例.經驗總結》,北京,北京航空航天大學出版社,2005
[5] 李洋,《EDA技術 使用教程》,北京,機械工業出版社,2009
[6] 網路資源:EDA課程設計、EDA課程設計—彩燈控制器等