EDA數(shù)字電子鐘課程設(shè)計(jì)
本文關(guān)鍵詞:eda課程設(shè)計(jì),由筆耕文化傳播整理發(fā)布。
一 緒論
1 在信息產(chǎn)業(yè)中 EDA 產(chǎn)生的影響
隨著大規(guī)模集成電路技術(shù)和計(jì)算機(jī)技術(shù)的不斷發(fā)展,在涉及通信、國(guó)防、航 天、醫(yī)學(xué)、工業(yè)自動(dòng)化、計(jì)算機(jī)應(yīng)用、儀器儀表等領(lǐng)域的電子系統(tǒng)設(shè)計(jì)工作中, EDA 技術(shù)的含量正以驚人的速度上升;電子類的高新技術(shù)項(xiàng)目的開(kāi)發(fā)也逾益依賴 于 EDA 技術(shù)的應(yīng)用。即使是普通的電子產(chǎn)品的開(kāi)發(fā),EDA 技術(shù)常常使一些原來(lái) 的技術(shù)
瓶頸得以輕松突破,從而使產(chǎn)品的開(kāi)發(fā)周期大為縮短、性能價(jià)格比大幅提 高。不言而喻,EDA 技術(shù)將迅速成為電子設(shè)計(jì)領(lǐng)域中的極其重要的組成部分。
2 中國(guó)國(guó)內(nèi) EDA 發(fā)展情況
從目前的 EDA 技術(shù)來(lái)看,其發(fā)展趨勢(shì)是政府重視、使用普及、應(yīng)用文泛、工具 多樣、軟件功能強(qiáng)大。 中國(guó) EDA 市場(chǎng)已漸趨成熟,不過(guò)大部分設(shè)計(jì)工程師面向的是 PC 主板和小型 ASIC 領(lǐng)域,僅有小部分(約 11%)的設(shè)計(jì)人員工發(fā)復(fù)雜的片上系統(tǒng)器件。為了 與臺(tái)灣和美國(guó)的設(shè)計(jì)工程師形成更有力的競(jìng)爭(zhēng),中國(guó)的設(shè)計(jì)隊(duì)伍有必要購(gòu)入一 些最新的 EDA 技術(shù)。 在信息通信領(lǐng)域,要優(yōu)先發(fā)展高速寬帶信息網(wǎng)、深亞微米集成電路、新型元 器件、計(jì)算機(jī)及軟件技術(shù)、第三代移動(dòng)通信技術(shù)、信息管理、信息安全技術(shù), 積極開(kāi)拓以數(shù)字技術(shù)、網(wǎng)絡(luò)技術(shù)為基礎(chǔ)的新一代信息產(chǎn)品,發(fā)展新興產(chǎn)業(yè),培 育新的經(jīng)濟(jì)增長(zhǎng)點(diǎn)。 要大力推進(jìn)制造業(yè)信息化, 積極開(kāi)展計(jì)算機(jī)輔助設(shè)計(jì) (CAD) 、 計(jì)算機(jī)輔助工程(CAE)、計(jì)算機(jī)輔助工藝(CAPP)、計(jì)算機(jī)機(jī)輔助制造(CAM)、 產(chǎn)品數(shù)據(jù)管理(PDM)、制造資源計(jì)劃(MRPII)及企業(yè)資源管理(ERP)等。有 條件的企業(yè)可開(kāi)展“網(wǎng)絡(luò)制造”,便于合作設(shè)計(jì)、合作制造,參與國(guó)內(nèi)和國(guó)際 競(jìng)爭(zhēng)。開(kāi)展“數(shù)控化”工程和“數(shù)字化”工程。自動(dòng)化儀表的技術(shù)發(fā)展趨勢(shì)的 測(cè)試技術(shù)、控制技術(shù)與計(jì)算機(jī)技術(shù)、通信技術(shù)進(jìn)一步融合,形成測(cè)量、控制、
第 1 頁(yè) 共 23 頁(yè)
通信與計(jì)算機(jī)(M3C)結(jié)構(gòu)。在 ASIC 和 PLD 設(shè)計(jì)方面,向超高速、高密度、低 功耗、低電壓方向發(fā)展。
3 課程設(shè)計(jì)目的
(1)加深對(duì) VHDL 語(yǔ)言設(shè)計(jì)的理解。 (2)通過(guò)對(duì)多功能數(shù)字時(shí)鐘的設(shè)計(jì)加深對(duì) EDA 課程的理解 (3)通過(guò)對(duì)多功能數(shù)字時(shí)鐘的設(shè)計(jì)了解簡(jiǎn)易集成電路的設(shè)計(jì)思路 (4)熟悉 MAX+PLUS II 仿真軟件的工作方法及應(yīng)用技術(shù)
4 課題設(shè)計(jì)內(nèi)容
本次課程設(shè)計(jì)的主要目的旨在通過(guò)獨(dú)立完成一個(gè) “電子時(shí)鐘”的 設(shè)計(jì),達(dá)到對(duì) EDA 技術(shù)的熟練掌握,提升對(duì)《EDA 技術(shù)及應(yīng)用》課程所 學(xué)內(nèi)容的掌握和應(yīng)用。 在本次課程設(shè)計(jì)中使用 Altera 公司的 EPF10K10 系列的 FPGA 芯片, 基于實(shí)驗(yàn)室現(xiàn)有的 EDA 實(shí)驗(yàn)箱,實(shí)現(xiàn)“電子時(shí)鐘”的設(shè)計(jì)要求。 1、計(jì)數(shù) 24 小時(shí)的時(shí)鐘 2、六位數(shù)碼管顯示“時(shí)-分-秒” 3、五個(gè)功能鍵 (1) Timer 從其它狀態(tài)放回時(shí)鐘狀態(tài) (2) Alarm 切換到鬧鐘時(shí)間的設(shè)定 (3) Set (4) Down (5) Up 按一下,跳到下一個(gè)設(shè)置區(qū) 按一下,所設(shè)置區(qū)的數(shù)字減 1 按一下,所設(shè)置區(qū)的數(shù)字加 1
4、帶有鬧鐘功能; 5、鍵盤的設(shè)定值要求在 LED 上顯示。
一 設(shè)計(jì)的總體方案 流程圖:
第 2 頁(yè) 共 23 頁(yè)
本多功能數(shù)字時(shí)鐘由三個(gè)模塊組成:
(1)時(shí)間顯示模式:
24小時(shí)制顯示當(dāng)前時(shí)間:小時(shí)用8與7數(shù)碼管,分鐘用5與4位數(shù)碼管,秒由2 與1位數(shù)碼管表示,小時(shí)與分鐘之間、分鐘與秒之間用3和6位數(shù)碼管顯示“—”, 總計(jì)八位七段數(shù)碼顯示管。此模式下顯示當(dāng)前時(shí)間。
(2)校時(shí)模式:
將time鍵置于‘0’,運(yùn)用功能鍵set鍵對(duì)八位數(shù)碼管進(jìn)行選擇,并由功能鍵up 鍵進(jìn)行+1與down鍵進(jìn)行-1操作,通過(guò)此4個(gè)功能鍵進(jìn)行校時(shí)設(shè)置。 Set->數(shù)碼管7-> Set->數(shù)碼管6-> Set->數(shù)碼管5-> Set->數(shù)碼管4-> Set->數(shù)碼 管3-> Set->數(shù)碼管2-> Set->數(shù)碼管1 Up->+1;down->-1;
(3)鬧鐘設(shè)定模式:
將time鍵置于‘1’,設(shè)定模式與校時(shí)時(shí)設(shè)定一樣,運(yùn)用功能鍵set鍵對(duì)八位數(shù)碼 管進(jìn)行選擇,并由功能鍵up鍵進(jìn)行+1與down鍵進(jìn)行-1操作,通過(guò)此4個(gè)功能鍵進(jìn) 行校時(shí)設(shè)置。 Set->數(shù)碼管7-> Set->數(shù)碼管6-> Set->數(shù)碼管5-> Set->數(shù)碼管4-> Set->數(shù)碼 管3-> Set->數(shù)碼管2-> Set->數(shù)碼管1 Up->+1;down->-1;
二 設(shè)計(jì)的詳細(xì)原理
第 3 頁(yè) 共 23 頁(yè)
此多功能數(shù)字時(shí)鐘是由多個(gè)模塊組成,各個(gè)模塊實(shí)現(xiàn)各自不同的作用,綜合 起來(lái),便是多功能數(shù)字時(shí)鐘。
1、主要模塊如下: (1)輸入一個(gè) 250KHZ 的方波信號(hào) (2)計(jì)時(shí)模塊:
將time鍵置于‘0’,用軟件設(shè)計(jì),,當(dāng)脈沖累計(jì)2500000次時(shí)secondl自動(dòng)+1, 以此類推,可得出數(shù)字時(shí)鐘,并用8位7段對(duì)各時(shí)間進(jìn)行顯示。 輸入:250KHz脈沖,控制鍵time等 輸出:秒、分、小時(shí)
(3)校時(shí)模塊:
將time鍵置于‘0’, 運(yùn)用功能鍵set鍵對(duì)八位數(shù)碼管進(jìn)行選擇,并由功能鍵 up鍵進(jìn)行+1與down鍵進(jìn)行-1操作,通過(guò)此4個(gè)功能鍵進(jìn)行校時(shí)設(shè)置。 輸入:time狀態(tài)轉(zhuǎn)換鍵,set數(shù)碼管選定鍵,up+1鍵,down-1鍵 輸出:設(shè)定后的 秒,分,小時(shí)
(4)設(shè)定鬧鐘模塊:
與校時(shí)操作類似,只是先將time鍵置于‘1’, 再運(yùn)用功能鍵set鍵對(duì)八位數(shù) 碼管進(jìn)行選擇,并由功能鍵up鍵進(jìn)行+1與down鍵進(jìn)行-1操作,通過(guò)此4個(gè)功能鍵 進(jìn)行校時(shí)設(shè)置 輸入:time狀態(tài)轉(zhuǎn)換鍵,set數(shù)碼管選定鍵,up+1鍵,down-1鍵 輸出:所定的鬧鐘時(shí)間 秒,分,小時(shí)
(5)整點(diǎn)蜂鳴報(bào)時(shí)
運(yùn)用軟件進(jìn)行設(shè)置,當(dāng)minuteH與minuteL均為零時(shí),蜂鳴器響,也就是沒(méi)次整 點(diǎn)時(shí),蜂鳴器自動(dòng)響一分鐘,如果想設(shè)置響的時(shí)間,可以手動(dòng)改即可。并且可以 手動(dòng)按下功能鍵naozhong,這樣就可以手動(dòng)關(guān)閉蜂鳴器。 輸入:naozhong關(guān)閉蜂鳴器鍵
輸出:蜂鳴器發(fā)出蜂鳴聲
2、功能概述 輸入一個(gè) 250KHZ 的方波信號(hào),運(yùn)用 VHDL 語(yǔ)言對(duì)其進(jìn)行編譯,用計(jì)數(shù)器對(duì)方波 信號(hào)進(jìn)行技術(shù),當(dāng) cnt=2500000 時(shí),secondl 自動(dòng)+1,不斷進(jìn)行累加,可以達(dá)到 實(shí)現(xiàn)數(shù)字鐘自動(dòng)計(jì)時(shí)功能。并且此多功能數(shù)字鐘設(shè)有 5 個(gè)功能鍵, (1)time 鍵 控制顯示狀態(tài),可以選擇時(shí)鐘狀態(tài)與鬧鐘狀態(tài)的轉(zhuǎn)換(2)naozhong 鍵可以手動(dòng) 關(guān)閉蜂鳴器(3) set 鍵可以選擇需要改變的數(shù)碼管,以便進(jìn)行調(diào)時(shí)與設(shè)定鬧鐘 (4)up 鍵對(duì)對(duì)應(yīng)的數(shù)據(jù)進(jìn)行+1 操作(5)down 鍵對(duì)對(duì)應(yīng)的數(shù)據(jù)進(jìn)行-1 操作。通
第 4 頁(yè) 共 23 頁(yè)
過(guò)次 5 個(gè)功能鍵,便可實(shí)現(xiàn)多功能數(shù)字時(shí)鐘,擁有計(jì)時(shí)/校時(shí)功能,設(shè)定鬧鐘功 能,整點(diǎn)報(bào)時(shí)功能。
四 設(shè)計(jì)的步驟和過(guò)程 1 計(jì)時(shí)模塊:
if clk_1k'event and clk_1k = '1' then cnt:=cnt+1; ct:=ct+1; if ct=1000 then -- 1 秒計(jì)時(shí)。 ct:=0; secondL:=secondL+1; if secondL=10 then -- 10 秒計(jì)時(shí)。 secondL:=0; secondH:=secondH+1; end if; if secondH=6 then -- 1 分鐘計(jì)時(shí)。 secondH:=0; minuteL:=minuteL+1; end if; if minuteL=10 then -- 10 分鐘計(jì)時(shí)。 minuteL:=0; minuteH:=minuteH+1; end if; if minuteH=6 then -- 1 小計(jì)時(shí)時(shí)。 minuteH:=0; hourL:=hourL+1; end if; if hourL=10 then -- 10 小時(shí)計(jì)時(shí)。 hourL:=0; hourH:=hourH+1; end if; if hourH=2 and hourL =4 then -- 24 小時(shí)計(jì)時(shí) hourH:=0; hourL:=0; end if; 次模塊的主要作用是完成 24 小時(shí)的即時(shí)顯示。
2 校時(shí)模塊
if clk'event and clk = '1' then
第 5 頁(yè) 共 23 頁(yè)
d<=set; k<=up; p<=down if time='0' then if ( d='0' and set='1')then stat<=stat+1; end if; case stat is when 1 => if(k='0' and up='1')then hourH<=hourH+1; elsif( p='0' and down='1')then hourH<= hourH-1; end if; when 2 => if( k='0' and up='1')then hourL<= hourL+1; elsif( p='0' and down='1')then hourL<= hourL-1; end if; when 3 => if(k='0' and up='1')then minuteH<= minuteH +1; elsif( p='0' and down='1')then minuteH<= minuteH -1; end if; when 4 => if( k='0' and up='1')then minuteL<= minuteL+1; elsif( p='0' and down='1')then minuteL<= minuteL-1; end if; when 5=> if(k='0' and up='1')then secondH<= secondH +1; elsif(p='0' and down='1')then secondH<= secondH-1; end if; when 6 => if( k='0' and up='1')then secondL<= secondL +1; elsif( p='0' and down='1')then secondL<= secondL-1; end if; when others=>null; end case; end if;
第 6 頁(yè) 共 23 頁(yè)
此模塊的主要功能是進(jìn)行時(shí)鐘初始時(shí)間的設(shè)置。
3、設(shè)定鬧鐘模塊:
if clk'event and clk = '1' then d<=set; k<=up; p<=down; if time='1' then if ( d='0' and set='1')then stat<=stat+1; end if; case stat is when 1 => if(k='0' and up='1')then alarm_hourH<= alarm_hourH+1; elsif( p='0' and down='1')then alarm_hourH<= alarm_hourH-1; end if; when 2 => if( k='0' and up='1')then alarm_hourL<= alarm_hourL+1; elsif( p='0' and down='1')then alarm_hourL<= alarm_hourL-1; end if; when 3 => if(k='0' and up='1')then alarm_minuteH<= alarm_minuteH +1; elsif( p='0' and down='1')then alarm_minuteH<= alarm_minuteH -1; end if; when 4 => if( k='0' and up='1')then alarm_minuteL<= alarm_minuteL+1; elsif( p='0' and down='1')then alarm_minuteL<= alarm_minuteL-1; end if; when 5=> if(k='0' and up='1')then alarm_secondH<= alarm_secondH +1; elsif(p='0' and down='1')then alarm_secondH<=alarm_secondH-1; end if; when 6 => if( k='0' and up='1')then alarm_secondL<= alarm_secondL +1; elsif( p='0' and down='1')then
第 7 頁(yè) 共 23 頁(yè)
alarm_secondL<= alarm_secondL-1; end if; when others=>null; end case; end if;
此模塊完成鬧鐘的設(shè)定。
4、顯示模塊設(shè)計(jì)
if (time='0') then ahourH<=hourH; ahourL<=hourL; aminuteH<=minuteH; aminuteL<=minuteL; asecondH<=secondH; asecondL<=secondL; elsif(time='1')then ahourH<=alarm_hourH; ahourL<= alarm_hourL; aminuteH<= alarm_minuteH; aminuteL<= alarm_minuteL; asecondH<= alarm_secondH; asecondL<= alarm_secondL; end if; case cnt is -- To display the time. when 0 => L<="000"; -- Enable the leftmost display. case ahourH is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when others => null; end case; when 1 => L<="001"; -- Enable the second display. case ahourL is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when 6 => dled<=X"BE";--6 when 7 => dled<=X"E0";--7 when 8 => dled<=X"FE";--8
第 8 頁(yè) 共 23 頁(yè)
when 9 => dled<=X"F6";--9 when others => null; end case; when 2 => L<="010"; -- Enable the third display. dled<=X"01"; -- Blanked. when 3 => L<="011"; -- Enable the fourth display. case aminuteH is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when others => null; end case; when 4 => L<="100"; -- Enable the fifth display. case aminuteL is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when 6 => dled<=X"BE";--6 when 7 => dled<=X"E0";--7 when 8 => dled<=X"FE";--8 when 9 => dled<=X"F6";--9 when others => null; end case; when 5 => L<="101"; -- Enable the sixth display. dled<=X"01"; -- Blanked. when 6 => L<="110"; -- Enable the seventh display. case asecondH is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when others => null; end case; when 7 => L<="111"; -- Enable the rightmost display case asecondL is when 0 => dled<=X"FC";--0
第 9 頁(yè) 共 23 頁(yè)
when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when 6 => dled<=X"BE";--6 when 7 => dled<=X"E0";--7 when 8 => dled<=X"FE";--8 when 9 => dled<=X"F6";--9 when others => null; end case; end case; 此模塊實(shí)現(xiàn)數(shù)字鐘的顯示及鬧鐘設(shè)定時(shí)的顯示。
五、蜂鳴器模塊設(shè)計(jì)
if ((hourH = alarm_hourH) and (hourL= alarm_hourL) and (minuteH = alarm_minuteH) and (minuteL = alarm_minuteL)) or ((minuteH=0)and(minuteL=0) )then sound<='1'; end if; if (naozhong='1')then sound<='0'; end if;
此模塊實(shí)現(xiàn)鬧鐘蜂鳴以及整點(diǎn)蜂鳴報(bào)時(shí)。
四、設(shè)計(jì)的仿真和運(yùn)行結(jié)果
(1)將 time 鍵置于‘0’ ,輸入 clk 信號(hào),可以得到時(shí)鐘輸出波形為:
此時(shí)時(shí)鐘自動(dòng)計(jì)時(shí), 并且將計(jì)時(shí)數(shù)據(jù)傳送至顯示管顯示。 如上圖 asecond=second; (2)將 time 鍵置于‘0’ ,輸入 clk 信號(hào),并將 set 改為 20 分頻信號(hào),up 與 down
第 10 頁(yè) 共 23 頁(yè)
信號(hào)交叉為 1,得到時(shí)鐘輸出波形為:
如圖所示此時(shí)時(shí)間不是正常變化, 因?yàn)橛惺謩?dòng)設(shè)置進(jìn)行 up (+1) 操作和 down (-1) 操作,并且將時(shí)間由數(shù)碼管顯示。 (3)將 time 鍵置于‘1’ ,則顯示鬧鐘初始調(diào)節(jié)狀態(tài):
第 11 頁(yè) 共 23 頁(yè)
此時(shí) secondl,secondH,minuteL,minuteH,hourL,hourH 不受影響,均自動(dòng)計(jì)時(shí),但 是并不由數(shù)碼管進(jìn)行顯示,此時(shí)顯示的是鬧鐘初定時(shí)間,這時(shí)均為 0。由于 set 變化,stat 順序發(fā)生變化。 (4)將 time 置于‘1’ ,并可以改變 set 鍵進(jìn)行數(shù)碼管選擇,并用 up(+1)操作 和 down(-1)操作,進(jìn)行鬧鐘的初步設(shè)定。
此時(shí)可以得到時(shí)鐘的初步設(shè)定。 (5)外部硬件的鏈接方法如圖
(6)時(shí)鐘顯示如下圖
第 12 頁(yè) 共 23 頁(yè)
時(shí)鐘圖如上
鬧鐘初定時(shí)間如上圖
第 13 頁(yè) 共 23 頁(yè)
五 課程設(shè)計(jì)的心得體會(huì)
EDA 的課程設(shè)計(jì)持續(xù)了兩周,但我卻覺(jué)得仿佛還是當(dāng)日,真是揮指之間, 時(shí)光已匆匆流逝。在這整整兩個(gè)星期的日子里,我感受到了既是成功做出一個(gè)模 塊的歡喜,也是修改那無(wú)限 errors 時(shí)的憂愁,可以說(shuō)是無(wú)數(shù)次的苦盡甘來(lái),換來(lái) 了最后的成功。 本身我就對(duì)動(dòng)手的實(shí)驗(yàn)相當(dāng)有興趣,這次能夠擁有兩周的課程設(shè)計(jì)時(shí)間, 我甚是欣慰。從第一天開(kāi)始知道我的多功能時(shí)鐘課題開(kāi)始,我就第一時(shí)間跑去圖 書(shū)館借資料,回去反復(fù)研究,從看懂程序開(kāi)始入手。雖然開(kāi)始有些棘手,但我覺(jué) 得特別的興奮,我不把困難當(dāng)成攔路虎,反而成為我前進(jìn)的動(dòng)力,遇到困難不會(huì) 就翻書(shū),找不到就問(wèn)同學(xué),再不行就上網(wǎng)搜,實(shí)在不行再問(wèn)老師,總之想盡一切 辦法找到解決方案。可是事與愿違,我的設(shè)計(jì)總是出那么一點(diǎn)點(diǎn)的小問(wèn)題,有時(shí) 候編譯只出現(xiàn) 1 個(gè) error ,但一改就成了 20 個(gè) errors 了,真是讓人哭笑不得,望 天興嘆呀! 經(jīng)過(guò)兩三天的基礎(chǔ)訓(xùn)練,我終于能夠完整的看懂程序。首先我將老師給我 們基本的時(shí)鐘程序進(jìn)行編譯,封鎖引腳,然后在硬件上得到正確的數(shù)碼管顯示。 通過(guò)這個(gè)最基本的操作,我將大體流程映入腦海,可以舉一反三,再困難的程序 也不怕。 整點(diǎn)報(bào)時(shí)自然是最簡(jiǎn)單的,我首先就加到程序內(nèi)部,其次我在網(wǎng)上找到了 鬧鐘程序,因?yàn)楦蟛罹噙^(guò)大,所以我先讀懂程序,然后根據(jù)自己理解,一步 步的加進(jìn)初始的時(shí)鐘程序。這個(gè)看似很簡(jiǎn)單的過(guò)程,卻整整費(fèi)了 4 天的時(shí)間,期 間錯(cuò)誤百出。我先是運(yùn)用了多個(gè) process,進(jìn)行模塊化的處理,通過(guò)這里面出現(xiàn) 的問(wèn)題我才知道敏感參數(shù)列表是不能亂設(shè)置的,single 是全局變量,而 variable 只能在一個(gè) process 中使用等等。后來(lái)慢慢理解了其中的原委,發(fā)現(xiàn)我的程序竟 如此之長(zhǎng),我決定要大量的刪減,于是我又把多個(gè) process 改成了一個(gè),看似好 像我是又回到了出發(fā)點(diǎn),但我覺(jué)得這絕對(duì)是一次質(zhì)的飛躍,是我能夠依照我的想 法自由變換程序的映照。當(dāng)我自認(rèn)為要成功的時(shí)候,我卻遇到了一個(gè)相當(dāng)棘手的 問(wèn)題,此時(shí) error 顯示 unkown problem internal error:”widthe mismatch in relation opreator”in ebuildbinaryop an line 1347 of file,雖然只有一個(gè)問(wèn)題,但這個(gè)問(wèn)題卻
第 14 頁(yè) 共 23 頁(yè)
無(wú)法定位,以至于我找了很久都沒(méi)找到。那幾天我心里很壓抑,明明對(duì)的程序, 為什么就出現(xiàn)這樣的問(wèn)題,讓我真的很頭疼,差點(diǎn)絕望放棄。直至周二,我決定 從新回到起點(diǎn),再寫一次,一個(gè)模塊一個(gè)模塊往里加。終于在我不倦的努力下, 我找出了錯(cuò)誤的語(yǔ)句,并用其他語(yǔ)句替換了它,然后輕松地加入比較簡(jiǎn)單的校時(shí) 模塊、蜂鳴模塊。終于在周四之前將程序順利的完成,本想再將秒表加進(jìn)來(lái),但 看到程序比較繁瑣,就此作罷?吹阶詈蟪绦虻母鱾(gè)模塊正確的運(yùn)行,心情真是 無(wú)法言語(yǔ)… 通過(guò)這次獨(dú)立的課程設(shè)計(jì),我學(xué)到了很多書(shū)本上學(xué)不到的東西,尤其是在 改正錯(cuò)誤的時(shí)候,我能更加深入的了解 VHDL 語(yǔ)言的精妙之處。比如同一個(gè) process 下不能使用不同信號(hào)進(jìn)行 event 跳變,single 與 variable 之間的差別等等 等等。通過(guò)這一次一次的親身體驗(yàn),我仿佛發(fā)生了一次洗禮,經(jīng)過(guò)了一個(gè)質(zhì)的飛 躍,F(xiàn)在的我已經(jīng)基本能看懂 VHDL 程序,改正其中出現(xiàn)的錯(cuò)誤。
希望以后能多多進(jìn)行這樣的實(shí)習(xí),讓自己的能力越來(lái)越高。 參考書(shū)目:
[1] 閻石 主編, 《數(shù)字電子技術(shù)基礎(chǔ)》 ,高等教育出版社,1998 [2] 譚會(huì)生等主編, 《EDA 技術(shù)及應(yīng)用》 ,西安電子科技大學(xué)出版社,2001 [3] 廖裕評(píng)等主編, 《CPLD 數(shù)字電路設(shè)計(jì)——使用 MAX+plusⅡ入門篇》 ,清華大 學(xué)出版社,2001 [4] 馮濤等主編, 《可編程邏輯器件開(kāi)發(fā)技術(shù):MAX+plusⅡ入門與提高》 ,人民郵 電出版社,2002 [5] 楊崇志, 《特殊新型電子元件手冊(cè)》 ,遼寧科學(xué)技術(shù)出版社,1999 [6] 彭介華, 《電子技術(shù)課程設(shè)計(jì)指導(dǎo)》高等教育出版社.2000 年出版. [7] Mark Zwolinski, Digital System Design with VHDL, 電子工業(yè)出版社, 2002 [8] Alan B. Marcovitz Introduction to logic Design, 電子工業(yè)出版社,2002
第 15 頁(yè) 共 23 頁(yè)
附錄 1:
總程序如下:
library IEEE; use IEEE.std_logic_1164.all; entity timer is port(clk : in std_logic; -- System clock input port(250KHz). naozhong:in std_logic; L : out std_logic_vector(2 downto 0); -- 8 seven-segment displays selection ports. dled: out std_logic_vector(7 downto 0); -- Digits display ports. time:in std_logic; sound: out std_logic; clk_1:in std_logic; clk_2:in std_logic; clk_3:in std_logic); end timer; architecture display of timer is signal cnt: integer range 0 to 7; -- 8 seven-segment displays seletion counter. signal ct:integer range 0 to 250000 ; -- 1 second generator counter. signal hourH,ahourH,alarm_hourH: integer range 0 to 2; signal minuteH,secondH,aminuteH,asecondH,alarm_minuteH,alarm_secondH: integer range 0 to 6;
第 16 頁(yè) 共 23 頁(yè)
signal hourL,minuteL,secondL,ahourL,aminuteL,asecondL,alarm_hourL,alarm_minuteL,alarm_secondL: integer range 0 to 10; signal set : integer range 0 to 7; signal d,k,p: std_logic; begin process (clk) begin if clk'event and clk = '1' then sound<='1'; cnt<=cnt+1; ct<=ct+1; if ct=250000 then -- 1 second ct<=0; secondL<=secondL+1; end if; if secondL=10 then -- 10 seconds secondL<=0; secondH<=secondH+1; end if; if secondH=6 then -- 60 seconds(1 minute) secondH<=0; minuteL<=minuteL+1; end if; if minuteL=10 then -- 10 minutes minuteL<=0; minuteH<=minuteH+1; end if; if minuteH=6 then -- 60 minutes(1 hour) minuteH<=0; hourL<=hourL+1; end if; if hourL=10 then -- 10 hours hourL<=0; hourH<=hourH+1; end if; if hourH=2 and hourL =4 then -- 24 hours hourH<=0; hourL<=0; end if;
第 17 頁(yè) 共 23 頁(yè)
if (time='0') then ahourH<=hourH; ahourL<=hourL; aminuteH<=minuteH; aminuteL<=minuteL; asecondH<=secondH; asecondL<=secondL; elsif(time='1')then ahourH<=alarm_hourH; ahourL<= alarm_hourL; aminuteH<= alarm_minuteH; aminuteL<= alarm_minuteL; asecondH<= alarm_secondH; asecondL<= alarm_secondL; end if; case cnt is -- To display the time. when 0 => L<="000"; -- Enable the leftmost display. case ahourH is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when others => null; end case; when 1 => L<="001"; -- Enable the second display. case ahourL is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when 6 => dled<=X"BE";--6 when 7 => dled<=X"E0";--7 when 8 => dled<=X"FE";--8 when 9 => dled<=X"F6";--9 when others => null; end case; when 2 => L<="010"; -- Enable the third display. dled<=X"01"; -- Blanked. when 3 => L<="011"; -- Enable the fourth display. case aminuteH is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1
第 18 頁(yè) 共 23 頁(yè)
when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when others => null; end case; when 4 => L<="100"; -- Enable the fifth display. case aminuteL is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when 6 => dled<=X"BE";--6 when 7 => dled<=X"E0";--7 when 8 => dled<=X"FE";--8 when 9 => dled<=X"F6";--9 when others => null; end case; when 5 => L<="101"; -- Enable the sixth display. dled<=X"01"; -- Blanked. when 6 => L<="110"; -- Enable the seventh display. case asecondH is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when others => null; end case; when 7 => L<="111"; -- Enable the rightmost display case asecondL is when 0 => dled<=X"FC";--0 when 1 => dled<=X"60";--1 when 2 => dled<=X"DA";--2 when 3 => dled<=X"F2";--3 when 4 => dled<=X"66";--4 when 5 => dled<=X"B6";--5 when 6 => dled<=X"BE";--6 when 7 => dled<=X"E0";--7 when 8 => dled<=X"FE";--8 when 9 => dled<=X"F6";--9
第 19 頁(yè) 共 23 頁(yè)
when others => null; end case; end case; d<=clk_1; k<=clk_2; p<=clk_3; if time='1' then if ( d='0' and clk_1='1')then set<=set+1; end if; case set is when 1 => if(k='0' and clk_2='1')then alarm_hourH<= alarm_hourH+1; elsif( p='0' and clk_3='1')then alarm_hourH<= alarm_hourH-1; end if; when 2 => if( k='0' and clk_2='1')then alarm_hourL<= alarm_hourL+1; elsif( p='0' and clk_3='1')then alarm_hourL<= alarm_hourL-1; end if; when 3 => if(k='0' and clk_2='1')then alarm_minuteH<= alarm_minuteH +1; elsif( p='0' and clk_3='1')then alarm_minuteH<= alarm_minuteH -1; end if; when 4 => if( k='0' and clk_2='1')then alarm_minuteL<= alarm_minuteL+1; elsif( p='0' and clk_3='1')then alarm_minuteL<= alarm_minuteL-1; end if; when 5=> if(k='0' and clk_2='1')then alarm_secondH<= alarm_secondH +1; elsif(p='0' and clk_3='1')then alarm_secondH<=alarm_secondH-1; end if; when 6 => if( k='0' and clk_2='1')then alarm_secondL<= alarm_secondL +1; elsif( p='0' and clk_3='1')then alarm_secondL<= alarm_secondL-1;
第 20 頁(yè) 共 23 頁(yè)
end if; when others=>null; end case; end if; if time='0' then if ( d='0' and clk_1='1')then set<=set+1; end if; case set is when 1 => if(k='0' and clk_2='1')then hourH<=hourH+1; elsif( p='0' and clk_3='1')then hourH<= hourH-1; end if; when 2 => if( k='0' and clk_2='1')then hourL<= hourL+1; elsif( p='0' and clk_3='1')then hourL<= hourL-1; end if; when 3 => if(k='0' and clk_2='1')then minuteH<= minuteH +1; elsif( p='0' and clk_3='1')then minuteH<= minuteH -1; end if; when 4 => if( k='0' and clk_2='1')then minuteL<= minuteL+1; elsif( p='0' and clk_3='1')then minuteL<= minuteL-1; end if; when 5=> if(k='0' and clk_2='1')then secondH<= secondH +1; elsif(p='0' and clk_3='1')then secondH<= secondH-1; end if; when 6 => if( k='0' and clk_2='1')then secondL<= secondL +1; elsif( p='0' and clk_3='1')then secondL<= secondL-1; end if; when others=>null; end case;
第 21 頁(yè) 共 23 頁(yè)
end if; if ((hourH = alarm_hourH) and (hourL= alarm_hourL) and (minuteH = alarm_minuteH) and (minuteL = alarm_minuteL)) or ((minuteH=0)and(minuteL=0) )then sound<='1'; end if; if (secondH=1)or(naozhong='1')then sound<='0'; end if; end if; end process; end architecture display;
附錄 2: 仿真波形
第 22 頁(yè) 共 23 頁(yè)
更多相關(guān)文檔:
EDA 數(shù)字鐘設(shè)計(jì) (內(nèi)容較全面)
EDA設(shè)計(jì)II-多功能數(shù)字時(shí)... 24頁(yè) 1下載券 EDA數(shù)字時(shí)鐘課程設(shè)計(jì) 10頁(yè) 免費(fèi) ...II與FPGA,制作數(shù)字鐘...
基于EDA技術(shù)的數(shù)字時(shí)鐘設(shè)計(jì)
電子系統(tǒng)課程設(shè)計(jì)任務(wù)書(shū)設(shè)計(jì)題目:基于 EDA 技術(shù)的數(shù)字時(shí)鐘設(shè)計(jì) 設(shè)計(jì)題目 設(shè)計(jì)目的:課程設(shè)計(jì)是一種復(fù)雜的學(xué)習(xí)實(shí)踐過(guò)程。設(shè)計(jì)過(guò)程采用系統(tǒng) 設(shè)計(jì)目的 設(shè)計(jì)的方法, 先...
EDA數(shù)字電子鐘課程設(shè)計(jì)
一 緒論 1 在信息產(chǎn)業(yè)中 EDA 產(chǎn)生的影響隨著大規(guī)模集成電路技術(shù)和計(jì)算機(jī)技術(shù)的不斷發(fā)展,在涉及通信、國(guó)防、航天、醫(yī)學(xué)、工業(yè)自動(dòng)化、計(jì)算機(jī)應(yīng)用、儀器儀表等領(lǐng)域的...
多功能數(shù)字時(shí)鐘課程設(shè)計(jì)
多功能數(shù)字時(shí)鐘課程設(shè)計(jì)_工學(xué)_高等教育_教育專區(qū)。VHDL課程設(shè)計(jì) EDA 技術(shù)課程設(shè)計(jì)設(shè)計(jì)題目: 學(xué)號(hào): 專業(yè)年級(jí): 學(xué)院: 姓名: 指導(dǎo)教師: 時(shí)間: 多功能數(shù)字鐘設(shè)計(jì) ...
數(shù)字電子鐘課程設(shè)計(jì)報(bào)告
關(guān)鍵詞:數(shù)字電子鐘 校時(shí) 報(bào)時(shí) 子系統(tǒng) 一、設(shè)計(jì)要求本案例將在 QuartusII 開(kāi)發(fā)系統(tǒng)中用可編程邏輯器件,完成簡(jiǎn)易數(shù)字鐘的 EDA 設(shè)計(jì), 具體要求為: 1 數(shù)字鐘功能:...
數(shù)字電子鐘.eda課程設(shè)計(jì)
※※※ 2008 級(jí)學(xué)生 EDA 課程設(shè)計(jì) ※※ ※※※ EDA 課程設(shè)計(jì)報(bào)告書(shū) 課題名稱 姓學(xué)院專名號(hào)系業(yè) 數(shù)字電子鐘熊靜平 0812201-41 物理與電信工程系 電子信息...
eda課程設(shè)計(jì)數(shù)字鐘
EDA課程設(shè)計(jì) 數(shù)字時(shí)鐘 12頁(yè) 免費(fèi) EDA數(shù)字鐘設(shè)計(jì)論文 14頁(yè) 免費(fèi) 數(shù)字鐘課程設(shè)計(jì)報(bào)告 10頁(yè) 5財(cái)富值 eda課程設(shè)計(jì)報(bào)告_數(shù)字鐘 18頁(yè) 5財(cái)富值如要投訴違規(guī)內(nèi)容,請(qǐng)到...
eda課程設(shè)計(jì)-多功能數(shù)字鐘
eda課程設(shè)計(jì)-多功能數(shù)字鐘_電子/電路_工程科技_專業(yè)資料。多功能數(shù)字鐘 EDA 課程設(shè)計(jì)實(shí)用多功能數(shù)字鐘 學(xué)專班學(xué)姓 院: 業(yè): 級(jí): 號(hào): 名: 機(jī)械與電子工程學(xué)院...
電子鐘課程設(shè)計(jì)_圖文
湖南商學(xué)院《電子技術(shù)》課程設(shè)計(jì)報(bào)告題 目 數(shù)字電子鐘的設(shè)計(jì) 姓學(xué)專班 名: ...構(gòu)思設(shè)計(jì)方案; 3) 組建功能框圖,完成整機(jī)電路的系統(tǒng)設(shè)計(jì); 4) 應(yīng)用 EDA 軟件 ...
EDA課設(shè)數(shù)字鐘設(shè)計(jì)
EDA課設(shè)數(shù)字鐘設(shè)計(jì)_電子/電路_工程科技_專業(yè)資料。課程設(shè)計(jì)報(bào)告 課程名稱 課題名稱 數(shù)字系統(tǒng)與邏輯設(shè)計(jì) 數(shù)字鐘設(shè)計(jì) 專班學(xué)姓 業(yè)級(jí)號(hào)名 通信工程 指導(dǎo)教師 喬匯東...
更多相關(guān)標(biāo)簽:
eda電子鐘課程設(shè)計(jì) | 數(shù)字電子鐘課程設(shè)計(jì) | 數(shù)字電子鐘的課程設(shè)計(jì) | eda數(shù)字時(shí)鐘課程設(shè)計(jì) | eda課程設(shè)計(jì)數(shù)字鐘 | eda數(shù)字秒表課程設(shè)計(jì) | 數(shù)字電子鐘eda | 單片機(jī)電子鐘課程設(shè)計(jì) |本文關(guān)鍵詞:eda課程設(shè)計(jì),由筆耕文化傳播整理發(fā)布。
本文編號(hào):240584
本文鏈接:http://www.sikaile.net/wenshubaike/kcsz/240584.html