導航:首頁 > 文件教程 > eda技術實用教程第五版pdf

eda技術實用教程第五版pdf

發布時間:2023-06-10 11:16:54

① EDA技術實用教程—VHDL版(第4版) pdf

《EDA技術實用教程:VHDL版》(第四版),潘松、黃繼業編著,科學出版社2010年;《VHDL數字系統設計》,李欣、張海燕,科學出版社2009年。

② EDA技術實用教程的目錄

第1章緒論11.1EDA技術概論11.1.1EDA技術及發展21.1.2EDA技術應用41.2PLD及FPGA/CPLD產品概述51.2.1PLD技術及發展61.2.2PLD技術分類61.2.3PLD產品可編程原理71.2.4CPLD結構與可編程原理211.2.5FPGA結構與可編程原理291.2.6FPGA/CPLD器件配置器件321.3EDA設計基礎(數字系統)33小結36習題36
第2章FPGA/CPLD系統設計372.1FPGA/CPLD設計流程及常用開發工具372.1.1FPGA/CPLD設計流程372.1.2FPGA/CPLD常用開發工具382.2Quartus Ⅱ9.0軟體概述382.2.1Quartus Ⅱ 9.0軟體特點及支持的器件392.2.2Quartus Ⅱ 9.0軟體用戶界面及功能簡介402.2.3Quartus Ⅱ 9.0軟體設計流程462.2.4Quartus Ⅱ 9.0軟體設計實例472.3ISE10.1軟體概述542.3.1ISE10.1軟體特點及支持的器件552.3.2ISE10.1軟體用戶界面及功能簡介552.3.3ISE10.1軟體設計實例602.4Actel Libero IDE v9.1軟體概述632.4.1軟體特點及支持的器件632.4.2軟體用戶界面及功能簡介652.4.3Actel Libero IDE v9.1軟體設計實例68小結72習題73
第3章VHDL基礎743.1VHDL的基本元素743.1.1標識符743.1.2數據對象763.1.3數據類型803.1.4運算操作符853.2VHDL的語句基礎903.2.1進程語句903.2.2信號賦值語句943.2.3順序描述語句983.2.4並行描述語句1153.3VHDL的屬性描述1243.3.1值類屬性1253.3.2函數類屬性1283.3.3信號類屬性1313.3.4數據類型類屬性1333.3.5數據范圍類屬性134小結135習題135
第4章VHDL程序結構1364.1VHDL基本建模結構1364.1.1行為描述1364.1.2數據流描述1374.1.3結構描述1374.2VHDL實體1394.2.1實體語句1394.2.2參數傳遞說明語句1394.2.3參數傳遞映射語句1414.2.4埠說明語句1414.2.5實體說明部分1424.3VHDL結構體1424.3.1結構體名1434.3.2結構體說明部分1434.3.3並行處理語句1434.4子程序1444.4.1過程1444.4.2函數1494.5VHDL庫和程序包1544.5.1庫1544.5.2程序包1554.6元件和配置1564.6.1默認連接和默認配置1564.6.2元件配置1594.6.3塊的配置1614.6.4結構體配置164小結164習題165
第5章VHDL語言規范化標准及常見Warning分析1665.1編碼設計1665.1.1結構化設計1665.1.2代碼描述1675.1.3內部命名規則1675.1.4其他1685.2可綜合代碼描述規則1685.2.1概述1685.2.2復位1695.2.3時鍾1725.2.4介面非同步信號處理1745.2.5寄存器和鎖存器1755.2.6有限狀態機1775.2.7使用Case語句的多路復用1815.2.8編碼器1815.2.9解碼器1855.2.10計數器1885.2.11運算1885.2.12I/O1905.2.13非同步設計1915.3優化設計1925.3.1標准單元實現1935.3.2復雜邏輯運算單元共享1935.3.3中間信號1935.3.4針對目標FPGA的優化1945.3.5綜合工具設置優化1945.4常見Warning分析195小結196習題196
第6章NIOS軟核SOPC系統設計1976.1Nios Ⅱ軟核SOPC系統1976.1.1SOPC技術簡介1976.1.2Nios Ⅱ軟核SOPC系統結構及開發環境1986.2Nios Ⅱ指令系統1996.2.1寄存器結構1996.2.2定址方式2016.2.3Nios Ⅱ指令集2016.2.4Nios Ⅱ定製指令2066.3SOPC硬體系統開發2116.3.1硬體開發流程及環境介紹2126.3.2創建Quartus Ⅱ工程2126.3.3生成Nios Ⅱ系統2146.3.4集成Nios Ⅱ系統到Quartus Ⅱ工程2186.3.5Quartus Ⅱ工程編譯及下載2196.4SOPC軟體系統開發2196.4.1軟體開發流程及環境介紹2196.4.2HAL系統庫2206.4.3Nios Ⅱ IDE用戶應用程序建立2206.5Nios Ⅱ外圍設備2236.5.1SDRAM控制器2236.5.2CFI控制器2256.5.3EPCS設備控制器2266.5.4PIO控制器2276.5.5定時器控制器2276.5.6DMA控制器2296.5.7SPI核2306.5.8UART核2306.5.9JTAGUART核2316.5.10系統ID核2326.5.11PLL核2326.5.12mutex核2336.6SOPC系統深入設計——用戶定製外設2346.6.1元件開發流程2346.6.2硬體設計2356.6.3軟體設計2366.6.4驗證設計2366.6.5共享元件237小結237習題237
第7章Altera的IP核工具2387.1基本概念2387.1.1IP核的概念2387.1.2Altera可提供的IP核2397.2Altera基本宏功能設計實現2417.2.1基本宏功能定製2417.2.2基本宏功能實現2447.2.3設計實例2477.3Altera IP核設計實現2507.3.1IP核定製2517.3.2IP核實現2537.3.3設計實例254小結255習題255
第8章Quartus Ⅱ 9.0軟體功能及常用輔助設計工具2568.1I/O分配驗證2568.1.1I/O分配驗證簡介2578.1.2I/O分配驗證運行2608.2功率分析2628.2.1Excel-based功率計算器2638.2.2Simulation-based功率估算2668.3原理圖觀察工具2668.3.1RTL閱讀器2678.3.2技術映射查看器2738.4SignalProbe及SignalTap Ⅱ邏輯分析器2748.4.1SignalProbe2748.4.2SignalTap Ⅱ邏輯分析器2778.5時序收斂平面布局規劃器和器件規劃圖2838.5.1概述2848.5.2設計流程2858.6Quartus Ⅱ 9.0支持的第三方工具2938.6.1NativeLink與WYSIWYG2938.6.2Modelsim模擬工具2958.6.3Synplify/Sinplify Pro綜合工具310小結315習題315
參考文獻316

③ 數字鍾設計 用VHDL語言實現 你怎麼做的

源代碼如下自己把各個模塊打好包下面有個圖自己看看

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYTZKZQIS

PORT(KEY:INSTD_LOGIC_VECTOR(1DOWNTO0);--按鍵信號

CLK_KEY:INSTD_LOGIC;--鍵盤掃描信號

MAX_DAYS:INSTD_LOGIC_VECTOR(4DOWNTO0);--本月最大天數

SEC_EN,MIN_EN,HOUR_EN,DAY_EN,MON_EN,YEAR_EN,WEEK_EN:OUTSTD_LOGIC;--非同步並行置位使能

HOUR_CUR:INSTD_LOGIC_VECTOR(4DOWNTO0);

MIN_CUR,SEC_CUR:INSTD_LOGIC_VECTOR(5DOWNTO0);

YEAR_CUR:INSTD_LOGIC_VECTOR(6DOWNTO0);

MON_CUR:INSTD_LOGIC_VECTOR(3DOWNTO0);

DAY_CUR:INSTD_LOGIC_VECTOR(4DOWNTO0);

WEEK_CUR:INSTD_LOGIC_VECTOR(2DOWNTO0);

SEC,MIN:BUFFERSTD_LOGIC_VECTOR(5DOWNTO0);

HOUR:BUFFERSTD_LOGIC_VECTOR(4DOWNTO0);

DAY:BUFFERSTD_LOGIC_VECTOR(4DOWNTO0);

MON:BUFFERSTD_LOGIC_VECTOR(3DOWNTO0);

YEAR:BUFFERSTD_LOGIC_VECTOR(6DOWNTO0);

WEEK:BUFFERSTD_LOGIC_VECTOR(2DOWNTO0));

ENDENTITYTZKZQ;

ARCHITECTUREARTOFTZKZQIS

TYPESTATETYPEIS(NORMAL,SEC_SET,MIN_SET,HOUR_SET,DAY_SET,MON_SET,

YEAR_SET,WEEK_SET);

SIGNALMODE:STATETYPE;

BEGIN

PROCESS(KEY,CLK_KEY)

BEGIN

IFCLK_KEY'EVENTANDCLK_KEY='1'THEN

IFKEY="01"THEN

SEC_EN<='1';MIN_EN<='1';HOUR_EN<='1';

DAY_EN<='1';MON_EN<='1';YEAR_EN<='1';

WEEK_EN<='1';

CASEMODEIS

WHENNORMAL=>MODE<=SEC_SET;SEC<=SEC_CUR;SEC_EN<='0';

WHENSEC_SET=>MODE<=MIN_SET;MIN<=MIN_CUR;SEC_EN<='1';MIN_EN<='0';

WHENMIN_SET=>MODE<=HOUR_SET;HOUR<=HOUR_CUR;MIN_EN<='1';HOUR_EN<='0';

WHENHOUR_SET=>MODE<=DAY_SET;DAY<=DAY_CUR;HOUR_EN<='1';DAY_EN<='0';

WHENDAY_SET=>MODE<=MON_SET;MON<=MON_CUR;DAY_EN<='1';MON_EN<='0';

WHENMON_SET=>MODE<=YEAR_SET;YEAR<=YEAR_CUR;MON_EN<='1';

YEAR_EN<='0';

WHENYEAR_SET=>MODE<=WEEK_SET;WEEK<=WEEK_CUR;YEAR_EN<='1';WEEK_EN<='0';

WHENWEEK_SET=>MODE<=NORMAL;

ENDCASE;

ELSIFKEY="10"THEN--如果按下調整鍵,則自加

CASEMODEIS

WHENSEC_SET=>SEC_EN<='0';

--非同步並行置位使能有效

IFSEC="111011"THENSEC<="000000";

--如果秒計數到59,返回到0重新計數

ELSESEC<=SEC+1;--否則繼續計數

ENDIF;

WHENMIN_SET=>MIN_EN<='0';

IFMIN="111011"THENMIN<="000000";

ELSEMIN<=MIN+1;

ENDIF;

WHENHOUR_SET=>HOUR_EN<='0';

IFHOUR="11000"THENHOUR<="00000";

ELSEHOUR<=HOUR+1;

ENDIF;

WHENDAY_SET=>DAY_EN<='0';

IFDAY=MAX_DAYSTHENDAY<="00001";

ELSEDAY<=DAY+1;

ENDIF;

WHENWEEK_SET=>WEEK_EN<='0';

IFWEEK="111"THENWEEK<="001";

ELSEWEEK<=WEEK+1;

ENDIF;

WHENOTHERS=>NULL;

ENDCASE;

ENDIF;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREART;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNT60IS

PORT(LD:INSTD_LOGIC;

CLK:INSTD_LOGIC;

DATA:INSTD_LOGIC_VECTOR(5DOWNTO0);

NUM:BUFFERSTD_LOGIC_VECTOR(5DOWNTO0);

CO:OUTSTD_LOGIC);

ENDENTITYCNT60;

ARCHITECTUREARTOFCNT60IS

BEGIN

PROCESS(CLK,LD)IS

BEGIN

IF(LD='0')THEN

NUM<=DATA;

ELSIFCLK'EVENTANDCLK='1'THEN

IFNUM="111011"THEN--59

NUM<="000000";CO<='1';

ELSE

NUM<=NUM+1;CO<='0';

ENDIF;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREART;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNT60IS

PORT(LD:INSTD_LOGIC;

CLK:INSTD_LOGIC;

DATA:INSTD_LOGIC_VECTOR(5DOWNTO0);

NUM:BUFFERSTD_LOGIC_VECTOR(5DOWNTO0);

CO:OUTSTD_LOGIC);

ENDENTITYCNT60;

ARCHITECTUREARTOFCNT60IS

BEGIN

PROCESS(CLK,LD)IS

BEGIN

IF(LD='0')THEN

NUM<=DATA;

ELSIFCLK'EVENTANDCLK='1'THEN

IFNUM="111011"THEN--59

NUM<="000000";CO<='1';

ELSE

NUM<=NUM+1;CO<='0';

ENDIF;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREART;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNT24IS

PORT(LD:INSTD_LOGIC;

CLK:INSTD_LOGIC;

DATA:INSTD_LOGIC_VECTOR(4DOWNTO0);

NUM:BUFFERSTD_LOGIC_VECTOR(4DOWNTO0);

CO:OUTSTD_LOGIC);

ENDENTITYCNT24;

ARCHITECTUREARTOFCNT24IS

BEGIN

PROCESS(CLK,LD)IS

BEGIN

IF(LD='0')THEN

NUM<=DATA;

ELSIFCLK'EVENTANDCLK='1'THEN

IFNUM="11000"THEN--24

NUM<="00000";CO<='1';

ELSE

NUM<=NUM+1;CO<='0';

ENDIF;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREART;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNT30IS

PORT(LD:INSTD_LOGIC;

CLK:INSTD_LOGIC;

NIAN:INSTD_LOGIC_VECTOR(6DOWNTO0);

YUE:INSTD_LOGIC_VECTOR(3DOWNTO0);

DATA:INSTD_LOGIC_VECTOR(4DOWNTO0);

NUM:BUFFERSTD_LOGIC_VECTOR(4DOWNTO0);

MAX_DAYS:OUTSTD_LOGIC_VECTOR(4DOWNTO0);

CO:OUTSTD_LOGIC);

ENDENTITYCNT30;

ARCHITECTUREARTOFCNT30IS

SIGNALTOTAL_DAYS:STD_LOGIC_VECTOR(4DOWNTO0);

BEGIN

PROCESS(CLK,LD)IS

VARIABLEIS_RUNNIAN:STD_LOGIC;

BEGIN

CASENIANIS

WHEN"0000000"=>IS_RUNNIAN:='1';--0

WHEN"0000100"=>IS_RUNNIAN:='1';--4

WHEN"0001000"=>IS_RUNNIAN:='1';--8

WHEN"0001100"=>IS_RUNNIAN:='1';--12

WHEN"0010000"=>IS_RUNNIAN:='1';--16

WHEN"0010100"=>IS_RUNNIAN:='1';--20

WHEN"0011000"=>IS_RUNNIAN:='1';--24

WHEN"0011100"=>IS_RUNNIAN:='1';--28

WHEN"0100000"=>IS_RUNNIAN:='1';--32

WHEN"0100100"=>IS_RUNNIAN:='1';--36

WHEN"0101000"=>IS_RUNNIAN:='1';--40

WHEN"0101100"=>IS_RUNNIAN:='1';--44

WHEN"0110000"=>IS_RUNNIAN:='1';--48

WHEN"0110100"=>IS_RUNNIAN:='1';--52

WHEN"0111000"=>IS_RUNNIAN:='1';--56

WHEN"0111100"=>IS_RUNNIAN:='1';--60

WHEN"1000000"=>IS_RUNNIAN:='1';--64

WHEN"1000100"=>IS_RUNNIAN:='1';--68

WHEN"1001000"=>IS_RUNNIAN:='1';--72

WHEN"1001100"=>IS_RUNNIAN:='1';--76

WHEN"1010000"=>IS_RUNNIAN:='1';--80

WHEN"1010100"=>IS_RUNNIAN:='1';--84

WHEN"1011000"=>IS_RUNNIAN:='1';--88

WHEN"1011100"=>IS_RUNNIAN:='1';--92

WHEN"1100000"=>IS_RUNNIAN:='1';--96

WHENOTHERS=>IS_RUNNIAN:='0';

ENDCASE;

CASEYUEIS

WHEN"0001"=>TOTAL_DAYS<="11111";--1

WHEN"0011"=>TOTAL_DAYS<="11111";--3

WHEN"0101"=>TOTAL_DAYS<="11111";--5

WHEN"0111"=>TOTAL_DAYS<="11111";--7

WHEN"1000"=>TOTAL_DAYS<="11111";--8

WHEN"1010"=>TOTAL_DAYS<="11111";--10

WHEN"1100"=>TOTAL_DAYS<="11111";--12

WHEN"0100"=>TOTAL_DAYS<="11110";--4

WHEN"0110"=>TOTAL_DAYS<="11110";--6

WHEN"1001"=>TOTAL_DAYS<="11110";--9

WHEN"1011"=>TOTAL_DAYS<="11110";--11

WHEN"0010"=>

IF(IS_RUNNIAN='1')THEN

TOTAL_DAYS<="11101";

ELSE

TOTAL_DAYS<="11100";

ENDIF;

WHENOTHERS=>NULL;

ENDCASE;

IF(LD='0')THEN

NUM<=DATA;

ELSIFCLK'EVENTANDCLK='1'THEN

MAX_DAYS<=TOTAL_DAYS;

IFNUM=TOTAL_DAYSTHEN--99

NUM<="00001";CO<='1';

ELSE

NUM<=NUM+1;CO<='0';

ENDIF;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREART;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNT7IS

PORT(LD:INSTD_LOGIC;

CLK:INSTD_LOGIC;

DATA:INSTD_LOGIC_VECTOR(2DOWNTO0);

NUM:BUFFERSTD_LOGIC_VECTOR(2DOWNTO0));

ENDENTITYCNT7;

ARCHITECTUREARTOFCNT7IS

BEGIN

PROCESS(CLK,LD)IS

BEGIN

IF(LD='0')THEN

NUM<=DATA;

ELSIFCLK'EVENTANDCLK='1'THEN

IFNUM="111"THEN--7

NUM<="000";

ELSE

NUM<=NUM+1;

ENDIF;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREART;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNT12IS

PORT(LD:INSTD_LOGIC;

CLK:INSTD_LOGIC;

DATA:INSTD_LOGIC_VECTOR(3DOWNTO0);

NUM:BUFFERSTD_LOGIC_VECTOR(3DOWNTO0);

CO:OUTSTD_LOGIC);

ENDENTITYCNT12;

ARCHITECTUREARTOFCNT12IS

BEGIN

PROCESS(CLK,LD)IS

BEGIN

IF(LD='0')THEN

NUM<=DATA;

ELSIFCLK'EVENTANDCLK='1'THEN

IFNUM="1100"THEN--12

NUM<="0000";CO<='1';

ELSE

NUM<=NUM+1;CO<='0';

ENDIF;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREART;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCNT99IS

PORT(LD:INSTD_LOGIC;

CLK:INSTD_LOGIC;

DATA:INSTD_LOGIC_VECTOR(6DOWNTO0);

NUM:BUFFERSTD_LOGIC_VECTOR(6DOWNTO0));

ENDENTITYCNT99;

ARCHITECTUREARTOFCNT99IS

BEGIN

PROCESS(CLK,LD)IS

BEGIN

IF(LD='0')THEN

NUM<=DATA;

ELSIFCLK'EVENTANDCLK='1'THEN

IFNUM="1100011"THEN--12

NUM<="0000000";

ELSE

NUM<=NUM+1;

ENDIF;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREART;

④ VHDL數字時鍾完整程序代碼(要求要有元件例化,並且有按鍵消抖),謝謝啦啦啦啦

課程設計任務書

課程設計名稱 EDA課程設計 學生姓名 專業班級
設計題目 多功能數字鍾設計
一、 課程設計目的
1、綜合運用EDA技術,獨立完成一個課題的設計,考察運用所學知識,解決實際問題的能力;
2、結合理論知識,考察閱讀參考資料、文獻、手冊的能力;
3、進一步熟悉EDA技術的開發流程,掌握文件編輯、編譯、模擬、下載驗證等環節的實現方法和應用技巧;
4、鍛煉撰寫研究報告、研究論文的能力;
5、通過本實踐環節,培養科學和嚴謹的工作作風。
二、 設計內容、技術條件和要求
l、能進行正常的時、分、秒計時功能,分別由6個數碼顯示24小時、60分鍾的計數器顯示。
2、能利用實驗系統上的按鈕實現「校時」、「校分」功能;
(1)按下「SA」鍵時,計時器迅速遞增,並按24小時循環;
(2)按下「SB」鍵時,計時器迅速遞增,並按59分鍾循環,並向「時」進位;
(3)按下「SC」鍵時,秒清零;抖動的,必須對其消抖處理。
3、能利用揚聲器做整點報時:
(1)當計時到達59』50」時開始報時,頻率可為500Hz;計滿23小時後回零;計滿59分鍾後回零。(2)到達59』59」時為最後一聲整點報時,整點報時的頻率可定為lKHz。
4定時鬧鍾功能
5、用層次化設計方法設計該電路,用硬體描述語言編寫各個功能模塊。
6、報時功能。報時功能用功能模擬的模擬驗證,可通過觀察有關波形確認電路設計是否正確。
三、 時間進度安排
1周:(1) 完成設計准備,確定實施方案;(2) 完成電路文件的輸入和編譯;(4) 完成功能模擬。
2周:(1) 完成文件至器件的下載,並進行硬體驗證;(2) 撰寫設計說明書。
四、 主要參考文獻
(1)譚會生、瞿遂春,《EDA技術綜合應用實例與分析》,西安電子科技大學出版社,2004
(2)曹昕燕、周鳳臣等,《EDA技術實驗與課程設計》,清華大學出版社,2006
指導教師簽字: 2011年9月19日

一、實驗原理 :
用層次化設計的方法以VHDL語言編程實現以下功能:

【1】 具有「時」、「分」、「秒」計時功能;時為24進制,分和秒都為60進制。

【2】 具有消抖功能:手工按下鍵盤到是否這個過程大概50ms左右,在按下開始到彈簧片穩,定接觸這段時間為5-10ms,從釋放到彈片完全分開也是5-10ms,在達到穩定接觸和完全分開的微觀過程中,電平是時高時低的,因此如果在首次檢測到鍵盤按下時延時10ms再檢測就不會檢測到抖動的毛刺電平了。64Hz的信號周期為15.6ms,正適合做消抖信號。

【3】 具有校時和清零功能,能夠用4Hz脈沖對「小時」和「分」進行調整,並可進行秒零;

【4】 具有整點報時功能。在59分51秒、53秒、55秒、57秒發出低音512Hz信號,在59分59秒發出一次高音1024Hz信號,音響持續1秒鍾,在1024Hz音響結束時刻為整點。

【5】 具有一鍵設定鬧鈴及正常計時與鬧鈴時間的顯示轉換。鬧時時間為一分鍾。
二、程序流程:
1、秒計數器模塊設計:
模塊圖如圖1。六十進制帶進位計數器,可清零,clk輸入信號為1Hz脈沖,當q0計滿9後q1增加1,當q0滿9且q1記滿5,q1、q0同時歸零,co輸出為高電平。q1為十位q0為個位。

圖1

程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity c60 is
Port ( clk,clr : in std_logic;
co :out std_logic;
q1,q0 : out std_logic_vector(3 downto 0));
end c60;

architecture one of c60 is
begin
process (clk,clr)
variable cq1,cq0:std_logic_vector(3 downto 0);
begin
if clr='1' then cq1:=(others=>'0');cq0:=(others=>'0');
elsif (clk'event and clk='1') then
if cq0<9 then cq0:=cq0 +1;co<='0';
elsif cq1<5 then cq1:=cq1+1;cq0:=(others=>'0');
elsif cq1=5 and cq0=9
then co<='1';cq1:=(others=>'0'); cq0:=(others=>'0');
else co<='0';
end if;
end if;
q1<=cq1;
q0<=cq0;
end process;
end one;
模擬結果如下圖2

2、分計數器同上。註:不同之處為分的clk輸入信號為秒的進位信號。

3、時計數器:
模塊圖如圖3。24進制無進位計數器,當計數信號計到23後再檢測到計數信號時會自動零。帶清零,clk輸入為分秒進位相與的結果。q1為十位,q0為個位。

圖3
程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity c24 is
Port ( clk : in std_logic;
q1,q0 : out std_logic_vector(3 downto 0));
end c24;

architecture one of c24 is
begin
process (clk)
variable cq1,cq0:std_logic_vector(3 downto 0);
begin
if (clk'event and clk='1') then
if cq1="0010" and cq0="1001" then
cq1:="0000"; cq0:="0000";
elsif cq0<"1001" then
cq0:=cq0+1;
else cq0:="0000"; cq1:=cq1+1;
end if;
end if;

q1<=cq1;q0<=cq0;
end process;
end one;
模擬波形如下圖4:

圖4

4、分頻器:
模塊圖如圖5。由四個分頻器構成,輸入信號in_clk為1024Hz脈沖信號。把輸入的1024Hz信號分頻為四個脈沖信號,即1Hz的秒脈沖,4Hz的校時、校分脈沖,64Hz的消抖脈沖以及512Hz的蜂鳴器低音輸入。

圖5
程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity div is
Port ( in_clk : in std_logic;
clk_512, clk_1,clk_4 ,clk_64:out std_logic);

end div;

architecture one of div is
signal q512,a,b,c:std_logic;
signal c1,c4,c64:integer range 512 downto 0;
begin
process(in_clk)
begin
if in_clk'event and in_clk='1' then
q512<=not q512;
if c64>=7 then c64<=0;c<=not c;else c64<=c64+1;end if;
if c4>=127 then c4<=0;b<=not b;else c4<=c4+1;end if;
if c1>=511 then c1<=0;a<=not a;else c1<=c1+1;end if;
end if;
end process;
clk_512<=q512;
clk_1<=a;
clk_4<=b;
clk_64<=c;
end one;
模擬波形如下圖6:

圖6
5、消抖:
模塊圖如圖7。分頻出的用64Hz信號對sa校時信號、sb校分信號、sc秒清零信號、sd鬧時設置信號進行防抖動處理。是由四個兩級d觸發器構成的,分別對輸入的sa、sb、sc、sd
信號的相鄰兩個上升沿進行比較以確定按鍵的按下,從而達到消抖的目的。

圖7

程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity xd is
Port ( clk_64 : in std_logic;

hj,mj,sclr,sdo :out std_logic;
sa,sb,sc,sd : in std_logic);

end xd;

architecture one of xd is
begin
process(clk_64)
variable sa_n,sa_p,sb_n,sd_n,sb_p,sc_n,sc_p,sd_p:std_logic;
begin
if clk_64'event and clk_64='1' then
sa_p:=sa_n;sa_n:=sa;
sb_p:=sb_n;sb_n:=sb;
sc_p:=sc_n;sc_n:=sc;
sd_p:=sd_n;sd_n:=sd;

if sa_p= sa_n then hj<=sa;end if;
if sb_p= sb_n then mj<=sb;end if;
if sc_p= sc_n then sclr<=sc;end if;
if sd_p= sd_n then sdo<=sd;end if;
end if;
end process;
end one;
模擬波形如下圖8:

圖8
6、鬧鍾時間的設定:
模塊圖如圖9。一鍵設定鬧鈴時間,內部由四個d觸發器構成。當確定sd鍵按下時,將當前時間的小時和分的個位十位分別存入四個d觸發器內,作為鬧時時間。

圖9
程序如下

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity df4 is
Port ( sd :in std_logic;
hh,hl,mh,ml : in std_logic_vector(3 downto 0);

hh_o,hl_o,mh_o,ml_o: out std_logic_vector(3 downto 0));

end df4;

architecture one of df4 is
begin
process (sd,hh,hl,mh,ml)
begin
if sd='1' then
hh_o<=hh;hl_o<=hl;mh_o<=mh;ml_o<=ml;end if;
end process;
end one;
模擬波形如下圖10:

圖10
7、二選一電路
(1)一位二選一:
模塊圖如圖11。用以進行正常計時和校時/分的選擇。alarm為經過消抖的校時/分信號。當按鍵未曾按下時,即校時/分信號沒有到來時,二選一選擇器會選擇輸出a(正常計時輸入)信號,否則當alarm按鍵按下時輸出y為校時/分輸入信號——4Hz。

圖11
程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity xuan21 is
Port ( alarm,a,b: in std_logic;
y:out std_logic);
end xuan21 ;

architecture one of xuan21 is
begin
process(alarm,a,b)
begin
if alarm='0' then y<=a;else y<=b;
end if;
end process;
end one;
模擬波形如下圖12:

圖12
(2)三位二選一:
模塊圖如圖13。用以進行正常計時時間與鬧鈴時間顯示的選擇,alarm輸入為按鍵。當alarm按鍵未曾按下時二選一選擇器會選擇輸出顯示正常的計時結果,否則當alarm按鍵按下時選擇器將選擇輸出顯示鬧鈴時間顯示。

圖13
程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity x213 is
Port ( alarm : in std_logic;
y:out std_logic_vector(3 downto 0);
a,b: in std_logic_vector(3 downto 0));

end x213;

architecture one of x213 is
begin
process(alarm,a,b)
begin
if alarm='0' then y<=a;else y<=b;
end if;
end process;
end one;
模擬結果如下圖14:

圖14
8、整點報時及鬧時:
模塊圖如圖15。在59分51秒、53秒、55秒、57秒給揚聲器賦以低音512Hz信號,在59分59秒給揚聲器賦以高音1024Hz信號,音響持續1秒鍾,在1024Hz音響結束時刻為整點。當系統時間與鬧鈴時間相同時給揚聲器賦以高音1024Hz信號。鬧時時間為一分鍾。

圖15
程序如下:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity voice is
Port ( hou1,huo0,min1,min0,sec1,sec0,hh,hl,mh,ml: std_logic_vector(3 downto 0);
in_1000,in_500:in std_logic;
q : out std_logic);
end voice;

architecture one of voice is
begin
process(min1,min0,sec1,sec0)
begin
if min1="0101" and min0="1001" and sec1="0101" then
if sec0="0001" or sec0="0011" or sec0="0101" or sec0="0111"
then q<=in_500;
elsif sec1="0101" and sec0="1001" then q<=in_1000;
else q<='0';
end if;
else q<='0';
end if;
if min1=mh and min0=ml and hou1=hh and huo0=hl then
q<=in_1000;
end if;
end process;
end one;
模擬波形如下圖16

圖16
9、頂層原理圖:

三、感想

通過這次設計,既復習了以前所學的知識,也進一步加深了對EDA的了解,讓我對它有了更加濃厚的興趣。特別是當每一個子模塊編寫調試成功時,心裡特別的開心。但是在畫頂層原理圖時,遇到了不少問題,最大的問題就是根本沒有把各個模塊的VHD文件以及生成的器件都全部放在頂層文件的文件夾內,還有就是程序設計的時候考慮的不夠全面,沒有聯系著各個模式以及實驗板的情況來編寫程序,以至於多考慮編寫了解碼電路而浪費了很多時間。在波形模擬時,也遇到了一點困難,想要的結果不能在波形上得到正確的顯示
:在分頻模塊中,設定輸入的時鍾信號後,卻只有二分頻的結果,其餘三個分頻始終沒反應。後來,在數十次的調試之後,才發現是因為規定的信號量范圍太大且信號的初始值隨機,從而不能得到所要的結果。還有的模擬圖根本就不出波形,怎麼調節都不管用,後來才知道原來是路徑不正確,路徑中不可以有漢字。真是細節決定成敗啊!總的來說,這次設計的數字鍾還是比較成功的,有點小小的成就感,終於覺得平時所學的知識有了實用的價值,達到了理論與實際相結合的目的,不僅學到了不少知識,而且鍛煉了自己的能力,使自己對以後的路有了更加清楚的認識,同時,對未來有了更多的信心。

四、參考資料:
1、潘松,王國棟,VHDL實用教程〔M〕.成都:電子科技大學出版社,2000.(1)
2、崔建明主編,電工電子EDA模擬技術北京:高等教育出版社,2004
3、李衍編著,EDA技術入門與提高王行西安:西安電子科技大學出版社,2005
4、侯繼紅,李向東主編,EDA實用技術教程北京:中國電力出版社,2004
5、沈明山編著,EDA技術及可編程器件應用實訓北京:科學出版社,2004
6、侯伯亨等,VHDL硬體描述語言與數字邏輯電路設計西安: 西安電子科技大學出版社,1997
7、辛春艷編著,VHDL硬體描述語言北京:國防工業出版社,2002

閱讀全文

與eda技術實用教程第五版pdf相關的資料

熱點內容
安卓網路顯示h2是什麼意思 瀏覽:90
哪個拍照app好 瀏覽:70
文件被設置隱藏屬性如何顯示 瀏覽:142
網路電視的好處 瀏覽:657
cf槍戰王者手游下載官網下載最新版本下載 瀏覽:925
stm32固件庫版本查看 瀏覽:396
如何從數控編程小白到大師 瀏覽:183
更改微信共享實時位置信息 瀏覽:13
js姓名正則 瀏覽:843
如何利用串口傳輸文件夾 瀏覽:346
jca文件怎麼用word打開 瀏覽:965
U盤文件木馬隱藏exe工具 瀏覽:152
下載優酷app視頻播放器安裝 瀏覽:38
兩個excel文件不同 瀏覽:585
如何更新網站內容 瀏覽:953
什麼網站下載廣場舞是免費的 瀏覽:307
西門子編程軟體怎麼變成中文 瀏覽:984
居客來wifi密碼 瀏覽:604
文件為何為空linux 瀏覽:630
美劇鳥app安裝包在手機哪裡 瀏覽:985

友情鏈接