eda課程設計過程
A. EDA課程設計心得體會
這個是我做的「微機控制系統」的你照著改一下:
心得體會:
本系統主要介紹了鍋爐的液位檢測控制,還介紹了對溫度和壓力的檢測控制,介紹了8051單片機和其它一些單片機在鍋爐控制系統中的應用,介紹了它們的引腳和在系統中的電路圖,本設計還採用了多種感測器來對液位、溫度和壓力的信號採集,利用LED來進行信號的輸出顯示,我設計的硬體系統的結構簡化,系統精度高,具有良好的人機交互功能,並設有液位報警、高壓、低壓和閥門失靈等故障報警,有問題立即就能發現。通過自動調節控制液位並實現鍋爐內溫度和水位的報警。液位控制在設定值上正常運行不需要人工干預,操作人員勞動強度小。
採用單片機設計出的工業鍋爐控制器,能夠針對汽包水位的不同狀態和不同外界條件進行控制,汽包水位運行穩定、控製品質良好、控制效果明顯改善;同時大大提高了控制系統的抗干擾能力,保證了工業鍋爐的穩定運行。控制裝置具有成本低、抗干擾能力強、控制性能好等優點,且系統硬、軟體維護簡單方便,尤其適用於工業控制現場,具有良好的應用前景。
本系統所採用的感測器性能穩定,測量准確,大大簡化現場安裝,具有較高的性價比,有較大的工程應用價值,而且利用計算機單片機技術對鍋爐生產過程進行自動控制有著重要的意義。其優越性主要在於:首先,通過對鍋爐燃燒過程進行有效控制,使燃燒在合理的空燃比條件下進行,可以提高燃燒效率。由於工業鍋爐耗煤量大,燃燒熱效率每提高 1%都會產生巨大的經濟效益。其次,鍋爐控制過程的自動化處理以及監控軟體良好的人機界面,操作人員在監控計算機上能根據控制效果及時修運行參數,這樣能有效地減少工人的疲勞和失誤,提高生產過程的實時性、安全性。隨著計算機控制技術應用的普及、可靠性的提高及價格的下降,工業鍋爐的微機控制必將得到更加廣泛的應用。
B. 急求,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、下載後仍有問題,請看常見問題解答。
C. EDA課程設計——數字電子鍾
1、基本要求:能利用現有的硬體系統設計一個至少能顯示分、秒的控制電路。分和秒均用兩位數碼管指示,並具有調時、復位功能;
2、擴展要求:能同時顯示小時(兩位數碼管)並能調節小時功能;具有鬧鍾定時功能。
3、設計方法:採用模塊化描述方法,可分為分頻模塊、調時控制模塊、數碼顯示模塊、復位等模塊,每個模塊既可以編輯成獨立的HDL文件或GDF文件,也可以作為HDL程序中的一個進程模塊,最後進行系統模擬加以驗證,在此基礎上下載到硬體上進行現場測試。
4、輸入、輸出埠描述:輸入信號——時鍾信號clk、復位信號clr、時間設置鍵set、時間上調鍵tup、時間下調鍵tdown;輸出信號——掃描式七段數碼管段選輸出端led[7..0]、位選輸出端ctrlbit[3..0]。
我來幫他解答
2011-6-1 17:06
滿意回答
設計原理
計數時鍾由模為60的秒計數器模塊、模為60的分計數模塊、模為24的小時計數器模塊、指示燈與報警器的模塊、分/小時設定模塊及輸出顯示模塊等組成。秒計數器模塊的進位輸出為分計數器模塊的進位輸入,分計數器模塊的進位輸出為小時計數器模塊的進位輸入。其中秒計數器模塊中應有分鍾的設定,分計數器模塊中應有小時的設定。
內容
設計一個計數時鍾,使其具有24小時計數功能。通過「多功能復用按鍵F1-F12」信號接線組「F1_12(T)」的F9~F12的任意引線插孔可設置小時和分鍾的值,並具有整點報時的功能。
電路原理圖
模塊說明:計數時鍾由60秒計數器模塊XSECOND、60分計數器模塊XMINUTE、24小時計數器模塊XHOUR等六個模塊構成。秒計數器模塊的進位輸出為分計數器模塊的進位輸入,分計數器模塊中有小時的設定。通過SW1、SW2、SW3、SW4可設定小時和分鍾的值,並具有整點報時的功能。
輸入信號:SETMIN為分鍾設置信號;SETHOUR為小時設置信號;RESET為全局復位信號;CLK為全局時鍾信號;CKDSP為數碼管動態掃描信號。
輸出信號:SPEAK為蜂鳴器報時信號;LAMP[2..0]為指示燈信號;A~G為數碼管七個段位信號;SS[2..0]為數碼管段位解碼控制信號。
說明與電路連線
指示燈信號LAMP2~LAMP0為獨立擴展下載板上CPLD器件的第11、10、9腳,內部已連接並已鎖定,無需外接連線。
蜂鳴器報時信號SPEAK為獨立擴展下載板CPLD器件的第31腳,內部已連接並已鎖定,無需外接連線。
撥碼開關SW1~SW7內部已連接並已鎖定,無需外接連線。
數碼管七個段位信號A~G為獨立擴展下載板上CPLD器件的第86、87、88、89、90、92、93腳,應接數碼管段位引線接線組KPL_AH,從左到右依次對應的A、B、C、D、E、F、G引線插孔。
數碼管段位解碼控制信號SS0、SS1、SS2為獨立擴展下載板上CPLD器件的第68、69、70腳,為數碼管的位選掃描信號,分別接信號接線組DS1-8A(T)的SS0、SS1、SS2引線插孔(即在電源引線插孔組GND孔處)。
復位信號RESET為獨立擴展下載板上CPLD器件的第71腳,應接「多功能復用按鍵F1-F12」信號接線組「F1_12(T)」的F9~F12的任意一個插孔。
小時設置信號SETHOUR為獨立擴展下載板CPLD器件的第73腳,應接「多功能復用按鍵F1-F12」信號接線組「F1_12(T)」的F9~F12的任意一個插孔。
分鍾設置信號SETMIN為獨立擴展下載板上CPLD器件的第74腳,應接「多功能復用按鍵F1-F12」信號接線組「F1_12(T)」的F9~F12的任意一個插孔。
時鍾信號CLK為獨立擴展下載板上CPLD器件的183腳(即GCLK2),應接時鍾信號接線組「CLOCK(T)」的「FRQ(21)」引線插孔。
數碼管動態掃描信號CKDSP為獨立擴展下載板上CPLD器件的79腳(即GCLK1),應接時鍾信號接線組「CLOCK(T)」的「FRQ(11)」引線插孔。
參考源程序
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity xsecond is
port (
clk: in STD_LOGIC;
clkset: in STD_LOGIC;
setmin: in STD_LOGIC;
reset: in STD_LOGIC;
secout: out STD_LOGIC_VECTOR (6 downto 0);
enmin: out STD_LOGIC
);
end xsecond;
architecture xsecond_arch of xsecond is
signal sec : std_logic_vector(6 downto 0);
signal emin : std_logic;
signal sec1 : std_logic;
begin
-- <<enter your statements here>>
process(reset,sec,emin,setmin,clkset)
begin
if reset='0' then
enmin<='0';
secout<="0000000";
sec1<='1';
else
sec1<='0';
secout<=sec;
if clkset='1' and clkset'event then
if setmin='0' then
enmin<='1';
else
enmin<=emin;
end if;
end if;
end if;
end process;
process(clk,sec1)
alias lcount : std_logic_vector(3 downto 0) is sec(3 downto 0);
alias hcount : std_logic_vector(2 downto 0) is sec(6 downto 4);
begin
if sec1='1' then
sec<="0000000";
else
if (clk='1' and clk'event) then
if lcount=9 then
lcount<="0000";
if hcount/=5 then
hcount<=hcount+1;
emin<='0';
else
hcount<="000";
emin<='1';
end if;
else
lcount<=lcount+1;
emin<='0';
end if;
end if;
end if;
end process;
end xsecond_arch;
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity xminute is
port (
clkmin: in STD_LOGIC;
reset: in STD_LOGIC;
sethour: in STD_LOGIC;
clk: in STD_LOGIC;
minout: out STD_LOGIC_VECTOR (6 downto 0);
enhour: out STD_LOGIC
);
end xminute;
architecture xminute_arch of xminute is
signal min : std_logic_vector(6 downto 0);
signal ehour : std_logic;
signal min1 : std_logic;
begin
-- <<enter your statements here>>
process(reset,clk,sethour,min,ehour)
begin
if reset='0' then
enhour<='0';
minout<="0000000";
min1<='0';
else
min1<='1';
minout<=min;
if clk='1' and clk'event then
if sethour='0' then
enhour<='1';
else
enhour<=ehour;
end if;
end if;
end if;
end process;
process(clkmin,min1)
alias lcountm : std_logic_vector(3 downto 0) is min(3 downto 0);
alias hcountm : std_logic_vector(2 downto 0) is min(6 downto 4);
begin
if min1='0' then
min<="0000000";
else
if (clkmin='1' and clkmin'event) then
if lcountm=9 then
lcountm<="0000";
if hcountm/=5 then
hcountm<=hcountm+1;
ehour<='0';
else
hcountm<="000";
ehour<='1';
end if;
else
lcountm<=lcountm+1;
ehour<='0';
end if;
end if;
end if;
end process;
end xminute_arch;
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity xhour is
port (
clkhour: in STD_LOGIC;
reset: in STD_LOGIC;
hourout: out STD_LOGIC_VECTOR (5 downto 0)
);
end xhour;
architecture xhour_arch of xhour is
signal hour : std_logic_vector(5 downto 0);
begin
-- <<enter your statements here>>
process(reset,clkhour,hour)
alias lcount : std_logic_vector(3 downto 0) is hour(3 downto 0);
alias hcount : std_logic_vector(1 downto 0) is hour(5 downto 4);
begin
if reset='0' then
hourout<="000000";
hour<="000000";
else
if (clkhour='1' and clkhour'event) then
if lcount=9 then
lcount<="0000";
hcount<=hcount+1;
else
if hour="100011" then
hour<="000000";
else
lcount<=lcount+1;
end if;
end if;
end if;
hourout<=hour;
end if;
end process;
end xhour_arch;
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity xalert is
port (
clk: in STD_LOGIC;
d_in: in STD_LOGIC_VECTOR (6 downto 0);
speak: out STD_LOGIC;
d_out: out STD_LOGIC_VECTOR (2 downto 0)
);
end xalert;
architecture xalert_arch of xalert is
type state is (s1,s2,s3,s4);
signal next_state,current_state : state;
begin
-- <<enter your statements here>>
process(clk,current_state,d_in)
begin
if d_in/="0000000" then
speak<='0';
next_state<=s1;
current_state<=s1;
d_out<="000";
else
if clk='1' and clk'event then
speak<='1';
current_state<=next_state;
end if;
case current_state is
when s1 =>
d_out<="000";
next_state<=s2;
when s2 =>
d_out<="001";
next_state<=s3;
when s3 =>
d_out<="010";
next_state<=s4;
when s4 =>
d_out<="100";
next_state<=s1;
when others =>
d_out<="000";
null;
end case;
end if;
end process;
end xalert_arch;
library IEEE;
use IEEE.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity xsettime is
port (
hour: in STD_LOGIC_VECTOR (5 downto 0);
min: in STD_LOGIC_VECTOR (6 downto 0);
sec: in STD_LOGIC_VECTOR (6 downto 0);
reset: in STD_LOGIC;
clk: in STD_LOGIC;
sel: out STD_LOGIC_VECTOR (2 downto 0);
d_out: out STD_LOGIC_VECTOR (3 downto 0)
);
end xsettime;
architecture xsettime_arch of xsettime is
signal sel1 : std_logic_vector(2 downto 0);
begin
-- <<enter your statements here>>
process(clk,reset,sel1,hour,min,sec)
begin
if reset='0' then
sel<="000";
d_out<="0000";
sel1<="000";
else
if (clk='1' and clk'event) then
if sel1<5 then
sel1<=sel1+1;
else
sel1<="000";
end if;
end if;
sel<=sel1;
case sel1 is
when "000" =>
d_out(3)<='0';
d_out(2)<='0';
d_out(1)<=hour(5);
d_out(0)<=hour(4);
when "001" =>
d_out<=hour(3 downto 0);
when "010" =>
d_out(3)<='0';
d_out(2)<=min(6);
d_out(1)<=min(5);
d_out(0)<=min(4);
when "011" =>
d_out<=min(3 downto 0);
when "100" =>
d_out(3)<='0';
d_out(2)<=sec(6);
d_out(1)<=sec(5);
d_out(0)<=sec(4);
when "101" =>
d_out<=sec(3 downto 0);
when others =>
null;
end case;
end if;
end process;
end xsettime_arch;
library IEEE;
use IEEE.std_logic_1164.all;
entity xdeled is
port (
d_in: in STD_LOGIC_VECTOR (3 downto 0);
a: out STD_LOGIC;
b: out STD_LOGIC;
c: out STD_LOGIC;
d: out STD_LOGIC;
e: out STD_LOGIC;
f: out STD_LOGIC;
g: out STD_LOGIC
);
end xdeled;
才五分啊,太少了吧
哥剛的
D. 簡述基於eda軟體的fpga/cpld設計流程主要包括哪幾個步驟
1、功能定義/器件選型
一般都採用自頂向下的設計方法,把系統分成若干個基本單元,然後再把每個基本單元劃分為下一層次的基本單元,一直這樣做下去,直到可以直接使用EDA元件庫為止。
2、設計輸入
設計輸入是將所設計的系統或電路以開發軟體要求的某種形式表示出來,並輸入給EDA工具的過程。常用的方法有硬體描述語言(HDL)和原理圖輸入方法等。原理圖輸入方式是一種最直接的描述方式,在可編程晶元發展的早期應用比較廣泛,它將所需的器件從元件庫中調出來,畫出原理圖。
3、功能模擬
功能模擬也稱為前模擬是在編譯之前對用戶所設計的電路進行邏輯功能驗證,此時的模擬沒有延遲信息,僅對初步的功能進行檢測。
4、綜合優化
所謂綜合就是將較高級抽象層次的描述轉化成較低層次的描述。綜合優化根據目標與要求優化所生成的邏輯連接,使層次設計平面化,供FPGA布局布線軟體進行實現。
5、綜合後模擬
綜合後模擬檢查綜合結果是否和原設計一致。在模擬時,把綜合生成的標准延時文件反標注到綜合模擬模型中去,可估計門延時帶來的影響。但這一步驟不能估計線延時,因此和布線後的實際情況還有一定的差距,並不十分准確。
6、實現與布局布線
布局布線可理解為利用實現工具把邏輯映射到目標器件結構的資源中,決定邏輯的最佳布局,選擇邏輯與輸入輸出功能鏈接的布線通道進行連線,並產生相應文件(如配置文件與相關報告),實現是將綜合生成的邏輯網表配置到具體的FPGA晶元上,布局布線是其中最重要的過程。
7、時序模擬
時序模擬,也稱為後模擬,是指將布局布線的延時信息反標注到設計網表中來檢測有無時序違規(即不滿足時序約束條件或器件固有的時序規則,如建立時間、保持時間等)現象。時序模擬包含的延遲信息最全,也最精確,能較好地反映晶元的實際工作情況。
8、板級模擬與驗證
板級模擬主要應用於高速電路設計中,對高速系統的信號完整性、電磁干擾等特徵進行分析,一般都以第三方工具進行模擬和驗證。
9、晶元編程與調試
設計的最後一步就是晶元編程與調試。晶元編程是指產生使用的數據文件(位數據流文件,Bitstream Generation),然後將編程數據下載到FPGA晶元中。其中,晶元編程需要滿足一定的條件,如編程電壓、編程時序和編程演算法等方面。
E. 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課程設計—彩燈控制器等
F. 關於搶答器的EDA課程設計(完整的)
搶答器
通信081 李笑笑 082278
一、簡要說明
在進行智力競賽搶答題比賽時,在一定時間內,各參賽者考慮好答案後都想搶先答題。如果沒有合適的設備,有時難以分清他們的先後,使主持人感到為難。為了使比賽能順利進行,需要有一個能判斷搶答先後的設備,我們將它稱為智力競賽搶答器。
二、設計要求
1.最多可容納15名選手或15個代表隊參加比賽,他們的編號分別為1到15,各用一個搶答按鈕,其編號與參賽者的號碼一一對應。此外,還有一個按鈕給主持人用來清零,主持人清零後才可進行下一次搶答。
2.搶答器具有數據鎖存功能,並將所鎖存的數據用LED數碼管顯示出來。在主持人將搶答器清零後,若有參賽者按搶答按鈕,數碼管立即顯示出最先動作的選手的編號,搶答器對參賽選手動作的先後有很強的分辨能力,即較他們動作的先後只相差幾毫秒,搶答器也能分辨出來。數碼管不顯示後動作選手的編號,只顯示先動作選手的編號,並保持到主持人清零為止。
3.在各搶答按鈕為常態時,主持人可用清零按鈕將數碼管變為零狀態,直至有人使用搶答按鈕為止。搶答時間設為10秒。在10秒後若沒有參賽者按搶答按鈕,搶答按鈕無效。並保持到主持人清零為止。
三、設計提示
1. 輸入輸出信號
輸出顯示的位掃描時鍾信號可以作為鍵盤輸入的檢測掃描信號。10秒定時計數器的時鍾信號可以選2Hz的時鍾。復位信號用來使10秒定時器和鍵盤編碼器清零。15個按鍵輸入信號應進行編碼。A—G數碼管段驅動信號。SEG0,SEGl數碼管位驅動信號。
2.系統功能
按下非同步復位鍵,10秒定時器和鍵盤編碼器清零。放開非同步復位健後,啟動定時器,並允許鍵盤編碼器掃描信號輸入端,如在10秒內發現有輸入信號,將其編碼輸出,同時使定時器停止計時;否則,停止掃描編碼和定時,直到再次按下非同步復位健鍵。把16進制編碼轉換為十進制碼,經解碼後顯示。
3.設計框圖如圖:
四、程序代碼
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity answer is
port(
KEY_IN: in std_logic_vector(15 downto 1);
CLEAR: in std_logic;
SCANCLK: in std_logic;
CLK1S: in std_logic;
LED_OUT: out std_logic_vector(6 downto 0);
SCAN_OUT: out std_logic;
SOUND_OUT: out std_logic
);
end answer;
architecture rtl of answer is
signal KEY_CODE: integer range 0 to 15;
signal KEY_CODE_REG: integer range 0 to 15;
signal KEY_EN: std_logic;
signal NUM1: integer range 0 to 9;
signal NUM2: integer range 0 to 9;
signal KEY_EN1,KEY_EN2: std_logic;
signal KEY_IN1,KEY_IN2,KEY_INS: std_logic_vector(15 downto 1);
signal HEX: integer range 0 to 9;
signal TIME_CNT: std_logic_vector(3 downto 0);
begin
process(KEY_EN,KEY_IN,SCANCLK,CLEAR)
begin
if CLEAR = '0' then
KEY_CODE_REG<=0;
elsif SCANCLK'event and SCANCLK = '1' then
if KEY_CODE_REG = 0 then
KEY_CODE_REG<=KEY_CODE;
end if;
end if;
end process;
process(SCANCLK,CLEAR,KEY_IN)
begin
if SCANCLK'event and SCANCLK = '1' then
KEY_IN2 <= KEY_IN1;
KEY_IN1 <= KEY_IN;
end if;
end process;
KEY_INS<=not KEY_IN2 or KEY_IN1;
KEY_CODE<=0 when KEY_EN = '0' else
1 when KEY_INS(1)='0' else
2 when KEY_INS(2)='0' else
3 when KEY_INS(3)='0' else
4 when KEY_INS(4)='0' else
5 when KEY_INS(5)='0' else
6 when KEY_INS(6)='0' else
7 when KEY_INS(7)='0' else
8 when KEY_INS(8)='0' else
9 when KEY_INS(9)='0' else
10 when KEY_INS(10)='0' else
11 when KEY_INS(11)='0' else
12 when KEY_INS(12)='0' else
13 when KEY_INS(13)='0' else
14 when KEY_INS(14)='0' else
15 when KEY_INS(15)='0' else
0 ;
process(CLK1S,CLEAR,KEY_EN)
begin
if CLEAR = '0' then
TIME_CNT <= "0000";
elsif CLK1S'event and CLK1S = '1' then
if KEY_EN='1' then
TIME_CNT<=TIME_CNT + 1;
end if;
end if;
end process;
KEY_EN<='1' when KEY_CODE_REG = 0 and TIME_CNT<=9 else '0';
process(CLK1S,CLEAR,KEY_EN)
begin
if CLEAR = '0' then
KEY_EN1 <= '1';
KEY_EN2 <= '1';
elsif CLK1S'event and CLK1S = '1' then
KEY_EN2 <= KEY_EN1;
KEY_EN1 <= KEY_EN;
end if;
end process;
SOUND_OUT<=SCANCLK when KEY_EN1='0' and KEY_EN2='1' else '0';
with HEX select
LED_OUT<="0000110" when 1,
"1011011" when 2,
"1001111" when 3,
"1100110" when 4,
"1101101" when 5,
"1111101" when 6,
"0000111" when 7,
"1111111" when 8,
"1101111" when 9,
"0111111" when OTHERS;
HEX<= NUM1 when SCANCLK='0' else NUM2;
NUM2<=1 when KEY_CODE_REG>9 ELSE 0;
NUM1<=KEY_CODE_REG when KEY_CODE_REG<=9 ELSE KEY_CODE_REG-10;
SCAN_OUT <= SCANCLK;
end rtl;
G. EDA課程設計報告
課程設計總結
通過本次實驗用計算機操作的形式編輯計數器程序和繪制出了利用計版數器原權理的分頻器原理圖,了解了利用軟體繪制原理圖和編程的方法,以及用計算機形象的模擬計數器和分頻器的波形,在實驗中通過形象的方法結合圖形進行分析把在書上學習的理論知識進行實踐。不僅更好的理解和掌握了用軟體設計圖形和運行模擬的方法,也通過實驗把理論知識轉化為實際的圖形加以理解,更好的理解和掌握了此方面的知識。為以後的實踐積累了經驗
H. EDA課程設計
用單片機或者存儲器.
如果不允許用,可以這樣,整個過程分成24步,每步0.5秒。用幾回個個4017計數器,完成計答數,然後用二極體矩陣完成解碼,而且單片機的I/O就有鎖存功能一般不用加,你可以用164來擴展I/O口,他也可以鎖存的,宏晶的網站上有參考的電路圖,你可以去看看.