2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩34頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  緒 論</b></p><p>  1.1.1 FPGA的概述及特點(diǎn)</p><p>  FPGA是英文Field Programmable Gate Array的縮寫,即現(xiàn)場(chǎng)可編程門陣列,它是在PAL、GAL、EPLD等可編程器件的基礎(chǔ)上進(jìn)一步發(fā)展的產(chǎn)物。它是作為專用集成電路(ASIC)領(lǐng)域中的一種半定制電路而出現(xiàn)的,既解決了定制電路

2、的不足,又克服了原有可編程器件門電路數(shù)有限的缺點(diǎn)。FPGA采用了邏輯單元陣列LCA(Logic Cell Array)這樣一個(gè)新概念,內(nèi)部包括可配置邏輯模塊CLB(Configurable Logic Block)、輸出輸入模塊IOB(Input Output Block)和內(nèi)部連線(Interconnect)三個(gè)部分。</p><p>  特點(diǎn)有采用FPGA設(shè)計(jì)ASIC電路,用戶不需要投片生產(chǎn),就能得到合用的芯

3、片; FPGA可做其它全定制或半定制ASIC電路的中試樣片;FPGA內(nèi)部有豐富的觸發(fā)器和I/O引腳;FPGA是ASIC電路中設(shè)計(jì)周期最短、開發(fā)費(fèi)用最低、風(fēng)險(xiǎn)最小的器件之一;FPGA采用高速CHMOS工藝,功耗低,可以與CMOS、TTL電平兼容??梢哉f,F(xiàn)PGA芯片是小批量系統(tǒng)提高系統(tǒng)集成度、可靠性的最佳選擇之一。</p><p>  FPGA是由存放在片內(nèi)RAM中的程序來(lái)設(shè)置其工作狀態(tài)的,因此,工作時(shí)需要對(duì)片內(nèi)的

4、RAM進(jìn)行編程。用戶可以根據(jù)不同的配置模式,采用不同的編程方式。FPGA有多種配置模式:并行主模式為一片F(xiàn)PGA加一片EPROM的方式;主從模式可以支持一片PROM編程多片F(xiàn)PGA;串行模式可以采用串行PROM編程FPGA;外設(shè)模式可以將FPGA作為微處理器的外設(shè),由微處理器對(duì)其編程。</p><p> ?。?1.2 VHDL的概述及特點(diǎn)</p><p>  VHDL(Very High

5、Speed Integrated Circuit Hardware Description Language)即超高速集成電路硬件描述語(yǔ)言,在基于CPLD/FPGA和ASIC的數(shù)字系統(tǒng)設(shè)計(jì)中有著廣泛的應(yīng)用。VHDL語(yǔ)言誕生于1983年,1987年被美國(guó)國(guó)防部和IEEE確定為標(biāo)準(zhǔn)的硬件描述語(yǔ)言。自從IEEE發(fā)布了VHDL的第一個(gè)標(biāo)準(zhǔn)版本IEEE 1076-1987后,各大EDA公司都先后推出了自己的支持VHDL的EDA工具。VHDL在電子

6、設(shè)計(jì)行業(yè)得到了廣泛的認(rèn)同。此后IEEE又先后發(fā)布了IEEE 1076-1993和IEEE 1076-2000版本。 </p><p>  VHDL是硬件設(shè)計(jì)人員的一種描述工具,硬件設(shè)計(jì)本身還是要人來(lái)完成的。VHDL被設(shè)計(jì)出來(lái)的目的是為了硬件設(shè)計(jì),具有硬件的性質(zhì)。它用于描述電路系統(tǒng)的結(jié)構(gòu),接口,行為和功能,除了它具有的硬件特征的語(yǔ)句外,它的語(yǔ)言形式和描述風(fēng)格,以及句法與一般的計(jì)算機(jī)高級(jí)語(yǔ)言相當(dāng)類似,然而它又與軟件語(yǔ)

7、言具有完全不同的性質(zhì)。結(jié)構(gòu)簡(jiǎn)單明了,各部分負(fù)責(zé)的硬件描述明確,能避開硬件具體的器件結(jié)構(gòu),用強(qiáng)大的行為描述能力對(duì)電路從邏輯上進(jìn)行描述和設(shè)計(jì);可以看出,VHDL對(duì)設(shè)計(jì)的描述具有相對(duì)獨(dú)立性,設(shè)計(jì)者可以不懂硬件的結(jié)構(gòu),也不必關(guān)心最終設(shè)計(jì)實(shí)現(xiàn)的目標(biāo)器件是什么;設(shè)計(jì)者的責(zé)任是把硬件的結(jié)構(gòu)和功能完整詳細(xì)地描述出來(lái);此外,用VHDL設(shè)計(jì)的系統(tǒng)的功能可行性能夠在早期就檢驗(yàn)出來(lái),這主要是因?yàn)殡S時(shí)可以對(duì)設(shè)計(jì)進(jìn)行仿真;以上特點(diǎn)決定了VHDL擁有的另一個(gè)很重要的

8、優(yōu)勢(shì):代碼的再利用功能。這一點(diǎn)很適合目前急速發(fā)展的市場(chǎng)需求。</p><p>  1.2 MAX+plus II開發(fā)環(huán)境應(yīng)用簡(jiǎn)介</p><p>  1 、原理圖輸入(Graphic Editor)</p><p>  MAX+PLUSII軟件具有圖形輸入能力,用戶可以方便的使用圖形編輯器輸入電路圖,圖中的元器件可以調(diào)用元件庫(kù)中元器件,除調(diào)用庫(kù)中的元件以外,還可以

9、調(diào)用該軟件中的符號(hào)功能形成的功能塊.圖形編輯器窗口見圖(13)。</p><p>  2、硬件描述語(yǔ)言輸入(Text Editor)</p><p>  MAX+PLUSII軟件中有一個(gè)集成的文本編輯器,該編輯器支持VHDL,AHDL和Verilog硬件描述語(yǔ)言的輸入,同時(shí)還有一個(gè)語(yǔ)言模板使輸入程序語(yǔ)言更加方便,該軟件可以對(duì)這些程序語(yǔ)言進(jìn)行編譯并形成可以下載配置數(shù)據(jù),文本編輯器窗口見圖(1

10、4)。</p><p> ?。场⒉ㄐ尉庉嬈?Waveform Editor)</p><p>  在進(jìn)行邏輯電路的行為仿真時(shí),需要在所設(shè)計(jì)電路的輸入端加入一定的波形,波形編輯器可以生成和編輯仿真用的波形(*.SCF文件),使用該編輯器的工具條可以容易方便的生成波形和編輯波形。波形編輯器窗口如圖(15)所示。使用時(shí)只要將欲輸入波形的時(shí)間段用鼠標(biāo)涂黑,然后選擇工具條中的按鈕,例如,如果要某一時(shí)

11、間段為高電平,只需選擇按鈕 ”1”。</p><p>  還可以使用輸入的波形(*.WDF文件)經(jīng)過編譯生成邏輯功能塊,相當(dāng)于已知一個(gè)芯片的輸入輸出波形,但不知是何種芯片,使用該軟件功能可以解決這個(gè)問題,設(shè)計(jì)出一個(gè)輸入和輸出波形相同CPLD電路。</p><p> ?。?、管腳(底層)編輯窗口(Floorplan Editor)</p><p>  該窗口用于將已設(shè)計(jì)

12、好邏輯電路的輸入輸出節(jié)點(diǎn)賦予實(shí)際芯片的引腳,通過鼠標(biāo)的拖拉,方便的定義管腳的功能。管腳(底層)編輯窗口見圖(16)。</p><p><b>  5、設(shè)計(jì)規(guī)則檢查</b></p><p>  選取Compile\Processing\Design Doctor菜單,將調(diào)出規(guī)則檢查醫(yī)生,該醫(yī)生可以按照三種規(guī)則中的一個(gè)規(guī)則檢查各個(gè)設(shè)計(jì)文件,以保證設(shè)計(jì)的可靠性。一旦選擇該菜

13、單,在編譯窗口將顯示出醫(yī)生,用鼠標(biāo)點(diǎn)擊醫(yī)生,該醫(yī)生可以告訴你程序文件的健康情況。見圖(17)。 </p><p><b>  6、編程文件的產(chǎn)生</b></p><p>  編譯器中的裝配程序(Assembler)將編譯好的程序創(chuàng)建一個(gè)或多個(gè)編程目標(biāo)文件:</p><p>  EPROM配置文件(*.POF)例如,MAX7000S系列<

14、/p><p>  SRAM文件(*.SCF)例如,FLEX8000系列的配置芯片EPROM</p><p>  JEDEC文件(*.JED)</p><p>  十六進(jìn)制文件(*.HEX)</p><p>  文本文件(*.TTF)</p><p>  串行BIT流文件(*.SBF)</p><p>

15、;<b>  7、仿真</b></p><p>  當(dāng)設(shè)計(jì)文件被編譯好,并在波形編輯器中將輸入波形編輯完畢后,就可以進(jìn)行行為仿真了,通過仿真可以檢驗(yàn)設(shè)計(jì)的邏輯關(guān)系是否準(zhǔn)確.</p><p>  8、分析時(shí)間(Analyze Timing)</p><p>  該功能可以分析各個(gè)信號(hào)到輸出端的時(shí)間延遲,可以給出延遲矩陣和最高工作頻率.見圖(18)

16、和圖(19)。</p><p><b>  2 電子鐘的概述</b></p><p><b>  2.1 設(shè)計(jì)原理</b></p><p>  數(shù)字鐘電路的基本結(jié)構(gòu)由兩個(gè)60進(jìn)制計(jì)數(shù)器和一個(gè)24進(jìn)制計(jì)數(shù)器組成,分別對(duì)秒、分、小時(shí)進(jìn)行計(jì)時(shí),當(dāng)計(jì)時(shí)到23時(shí)59分59秒時(shí),再來(lái)一個(gè)計(jì)數(shù)脈沖,則計(jì)數(shù)器清零,重新開始計(jì)時(shí)。秒計(jì)數(shù)器

17、的計(jì)數(shù)時(shí)鐘CLK為1Hz的標(biāo)準(zhǔn)信號(hào),可以由晶振產(chǎn)生的24 MHz信號(hào)通過分頻得到。當(dāng)數(shù)字鐘處于計(jì)時(shí)狀態(tài)時(shí),秒計(jì)數(shù)器的進(jìn)位輸出信號(hào)作為分鐘計(jì)數(shù)器的計(jì)數(shù)信號(hào),分鐘計(jì)數(shù)器的進(jìn)位輸出信號(hào)又作為小時(shí)計(jì)數(shù)器的計(jì)數(shù)信號(hào)時(shí)、分、秒的計(jì)時(shí)結(jié)果通過6個(gè)數(shù)碼管來(lái)動(dòng)態(tài)顯示。數(shù)字鐘除了能夠正常計(jì)時(shí)外,還應(yīng)能夠?qū)r(shí)間進(jìn)行調(diào)整。因此,通過模式選擇信號(hào)MOD1、MOD2控制數(shù)字鐘的工作狀態(tài),即控制數(shù)字鐘,使其分別工作于正常計(jì)時(shí),調(diào)整分、時(shí)和設(shè)定分、時(shí)5個(gè)狀態(tài)。當(dāng)數(shù)字鐘

18、處于計(jì)時(shí)狀態(tài)時(shí),3個(gè)計(jì)數(shù)器允許計(jì)數(shù),且秒、分、時(shí)計(jì)數(shù)器的計(jì)數(shù)時(shí)鐘信號(hào)分別為CLK,秒的進(jìn)位, 分的進(jìn)位;當(dāng)數(shù)字鐘處于調(diào)整時(shí)間狀態(tài)時(shí),被調(diào)的分或時(shí)會(huì)一秒一秒地增加;當(dāng)數(shù)字鐘處于定時(shí)狀態(tài)時(shí),可以設(shè)定小時(shí)和分;當(dāng)計(jì)時(shí)到所設(shè)定的時(shí)刻時(shí),speak將會(huì)被賦予1KHz的脈沖信號(hào)用于驅(qū)動(dòng)揚(yáng)聲器.</p><p>  電子鐘的外形圖如下:</p><p>  圖1 電子鐘的外形圖</p>

19、<p>  2.1 整體設(shè)計(jì)框圖如下</p><p>  2.2 數(shù)字鐘在FPGA芯片中的頂層原理圖如下</p><p>  圖3 數(shù)字鐘在FPGA芯片中的頂層原理圖</p><p><b>  3各模塊設(shè)計(jì)</b></p><p><b>  3.1 外部按鍵</b></p&g

20、t;<p>  Reset鍵: 該鍵為系統(tǒng)復(fù)位按鍵,按此鍵可以進(jìn)行時(shí)間的復(fù)位。如:時(shí)間顯示為23:09:18,則按此鍵后時(shí)間顯示了00:00:00;</p><p>  alarm鍵:該鍵為鬧鐘設(shè)定按鍵,按此鍵可以進(jìn)行鬧鐘的任意時(shí)間設(shè)置;</p><p>  stop鍵:該鍵為時(shí)間定時(shí)設(shè)定按鍵,用此鍵可以完成時(shí)間的定時(shí)功能;</p><p>  ok鍵

21、:該鍵作為任何設(shè)定動(dòng)作的確認(rèn)鍵,如當(dāng)需要調(diào)整時(shí)間時(shí),調(diào)整好需要的時(shí)間后,按ok鍵即可確認(rèn)所調(diào)的時(shí)間;</p><p>  調(diào)秒鍵、調(diào)分鍵、調(diào)時(shí)鍵,六個(gè)七段數(shù)碼管。</p><p>  3.2 晶振電路模塊</p><p>  振蕩器是數(shù)字鐘的核心。振蕩器的穩(wěn)定度及頻率的精確度決定了數(shù)字鐘計(jì)時(shí)的準(zhǔn)確程度,通常選用石英晶體構(gòu)成振蕩器電路。一般來(lái)說,振蕩器的頻率越高,計(jì)時(shí)

22、精度越高。電子手表集成電路中的晶體振蕩器電路,取晶振的頻率為32768Hz,</p><p>  圖4 晶 振 電 路</p><p><b>  3.3 分頻器模塊</b></p><p>  為了得到秒脈沖信號(hào),需要經(jīng)過一個(gè)分頻電路,主要有2個(gè)部分,一個(gè)是產(chǎn)生1HZ的計(jì)數(shù)頻率,一個(gè)是產(chǎn)生128HZ的顯示掃描頻率,其引腳說明如下</p&

23、gt;<p>  圖6 分頻器模塊引腳說明圖</p><p><b>  其程序如下:</b></p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all; </p><p>  use ieee.std_logic_unsigned.all

24、;</p><p>  use ieee.std_logic_arith.all;</p><p>  entity d32768 is</p><p>  port( clk: in std_logic; --from system clock(32hz)</p><p>  f128hz: out std_logic;</p>

25、<p>  f1hz: out std_logic); -- lhz output signal </p><p><b>  end ; </b></p><p>  architecture arch of d32768 is --input: clk , output: flhz</p><p>  signal cou

26、nt1 : integer range 0 to 255; </p><p>  signal count2 : integer range 0 to 127; </p><p>  signal f128: std_logic;</p><p>  begin -- process for dividing by 1M</p><p&g

27、t;  process(clk) </p><p><b>  begin</b></p><p>  if rising_edge(clk) then count1 <= count1 + 1;</p><p>  if count1=255 then f128<='0'; count1 <= 0;<

28、/p><p>  elsif count1=122 then f128<='1'; </p><p><b>  end if;</b></p><p><b>  end if; </b></p><p>  end process; </p><p>

29、;  f128hz <= f128;</p><p>  process(f128 ) </p><p><b>  begin</b></p><p>  if rising_edge(f128) then count2 <= count2 + 1;</p><p>  if count2=127 then

30、 f1hz<='0'; count2 <= 0;</p><p>  elsif count2=63 then f1hz <='1'; </p><p><b>  end if;</b></p><p><b>  end if; </b></p>&

31、lt;p>  end process; </p><p><b>  end ;</b></p><p>  clk:為頻率輸入端</p><p>  f128hz: out std_logic:為譯碼掃描輸入128 HZ的頻率</p><p>  f1hz: out std_logic) 為計(jì)數(shù)器模塊輸入1HZ

32、的頻率</p><p>  3.4 正常計(jì)數(shù)器模塊</p><p>  電子鐘計(jì)時(shí)模塊主要是用來(lái)實(shí)現(xiàn)內(nèi)部定時(shí)計(jì)數(shù)功能。計(jì)時(shí)模塊的輸入信號(hào)包括內(nèi)部計(jì)時(shí)時(shí)鐘信號(hào)clk0,輸出信號(hào)就是計(jì)時(shí)信息,包括小時(shí)十位信號(hào)hr10、小時(shí)個(gè)位信號(hào)hr、分十位信號(hào)min10、分個(gè)位信號(hào)min、秒十位信號(hào)sec10、秒個(gè)位信號(hào)sec。實(shí)現(xiàn)計(jì)數(shù)器模塊的原理圖如下:</p><p>  圖7

33、計(jì)數(shù)器模塊的原理圖</p><p>  1. 秒計(jì)數(shù):秒計(jì)數(shù),在頻率為1HZ的時(shí)鐘下以60次為循環(huán)計(jì)數(shù),并產(chǎn)生進(jìn)位信號(hào)影響分計(jì)數(shù);</p><p>  2. 分計(jì)數(shù):分計(jì)數(shù),在秒進(jìn)位信號(hào)為高電平時(shí),計(jì)數(shù)一次,同樣以60次為一個(gè)循環(huán)計(jì)數(shù),同時(shí)產(chǎn)生分進(jìn)位信號(hào)影響時(shí)計(jì)數(shù);</p><p>  3 .時(shí)計(jì)數(shù):時(shí)計(jì)數(shù),在分進(jìn)位信號(hào)為高電平時(shí),計(jì)數(shù)一次,以24次為一個(gè)循環(huán)

34、計(jì)數(shù)count60(秒計(jì)數(shù)和分計(jì)數(shù))源程序如下</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  use ieee.std_logic_arith.all;&l

35、t;/p><p>  entity count60 is</p><p>  port( carry: in std_logic;--from 1hz input clock or the</p><p>  --full index of second/minute</p><p>  rst: in std_logic;--initializ

36、ation</p><p>  times: out integer range 0 to 59;</p><p>  full: out std_logic); -- carry_out signal</p><p>  end count60;</p><p>  architecture arch of count60 is --i

37、nput:rst,carry</p><p>  --output:times,full</p><p>  signal time : integer range 0 to 59;</p><p><b>  begin</b></p><p>  -- process for 60 seconds counting&

38、lt;/p><p>  process (rst,carry)</p><p><b>  begin</b></p><p>  if rst='1' then time <= 0; full<='0';</p><p>  elsif rising_edge(carry)

39、then</p><p>  if time=59 then time<=0; --over 60</p><p>  full<='1'; --carry_out signal</p><p>  else time<= time + 1; --keep counting</p><p>  ful

40、l<='0';</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  end process;</p><p>  times<=time; end arch;</p><

41、p>  port輸入時(shí)鐘信號(hào)和進(jìn)位信號(hào);</p><p>  times: 時(shí)間輸出從0到59</p><p>  full:計(jì)數(shù)產(chǎn)生進(jìn)位</p><p>  Count24(時(shí)計(jì)數(shù)) 源程序如下:</p><p>  library ieee; </p><p>  use ieee.std_logic_116

42、4.all; </p><p>  use ieee.std_logic_unsigned.all; </p><p>  use ieee.std_logic_arith.all; </p><p>  entity count24 is</p><p>  port( carry: in std_logic; --from 1hz in

43、put clock or </p><p>  --the full_index of second/minute</p><p>  rst: in std_logic; --initialization</p><p>  times: out integer range 0 to 23;</p><p>  full: out std

44、_logic); -- carry_out signal </p><p>  end count24; </p><p>  architecture arch of count24 is --input:rst,carry</p><p>  --output:times,full</p><p>  signal time :

45、integer range 0 to 23;</p><p>  begin --process for 60 seconds counting</p><p>  process (rst,carry)</p><p><b>  begin</b></p><p>  if rst='1' the

46、n time <= 0; full<='0';</p><p>  elsif rising_edge(carry) then</p><p>  if time=23 then time<=0; --over 24</p><p>  full<='1'; --carry_out signal<

47、/p><p>  else time<= time + 1; --keep counting</p><p>  full<='0';</p><p>  end if; end if;</p><p>  end process;</p><p>  times <= tim

48、e; end arch;</p><p>  port輸入時(shí)鐘信號(hào)和進(jìn)位信號(hào);</p><p>  times: 時(shí)間輸出從0到23</p><p>  full:計(jì)數(shù)產(chǎn)生進(jìn)位</p><p><b>  3.5 定時(shí)器模塊</b></p><p>  在此模塊中,先利用stop_watc

49、h組件設(shè)定定時(shí)器的計(jì)時(shí)時(shí)間,并執(zhí)行計(jì)時(shí)動(dòng)作,取得計(jì)時(shí)終止指針,然后由計(jì)時(shí)終止指針標(biāo)示出計(jì)時(shí)終止?fàn)顟B(tài)led_stop =’1’。其模塊如下圖所示。</p><p>  圖 8 定時(shí)器模塊圖</p><p>  定時(shí)器模塊的源程序如下:</p><p>  library ieee; </p><p>  use ieee.std_logic_1

50、164.all; </p><p>  use ieee.std_logic_arith.all; </p><p>  use ieee.std_logic_unsigned.all;</p><p>  ---input and output pins declaraction </p><p>  entity stop_watch i

51、s</p><p>  port(rst,hz1: in std_logic;--system clock 1hz</p><p>  stop: in std_logic; --keep pushing to declare stop setting</p><p>  --stop:時(shí)器設(shè)定動(dòng)作按鍵 </p><p&

52、gt;  -- ok: 任何設(shè)定動(dòng)作的確認(rèn)? </p><p>  ok: in std_logic;--keep pushing to declare stop setting</p><p>  sec_tune: in std_logic;--pushing button to tune seconds</p><p>  min_tune

53、: in std_logic;--pushing button to tune minutes</p><p>  hour_tune: in std_logic;--pushing button to tune hours</p><p>  stop_sec,stop_min: out integer range 0 to 59;</p><p>  stop_

54、hour: out integer range 0 to 23;</p><p>  index: out std_logic;</p><p>  disp: out std_logic); </p><p>  end stop_watch; </p><p>  architecture arch of stop_watch is<

55、;/p><p>  signal a_sec,a_min: integer range 0 to 59;</p><p>  signal a_hour: integer range 0 to 23;</p><p><b>  begin</b></p><p>  process(stop,ok,hz1) </p&

56、gt;<p><b>  begin </b></p><p>  if rst='1' then index<='0'; disp<='0';</p><p>  elsif rising_edge(hz1) then</p><p>  if stop='1&

57、#39; and ok='0' then -- setting</p><p>  if sec_tune='1' then</p><p>  if a_sec=59 then a_sec<=0;</p><p>  else a_sec<=a_sec + 1;</p><p><b&

58、gt;  end if;</b></p><p><b>  end if;</b></p><p>  if min_tune='1' then</p><p>  if a_min=59 then a_min<=0;</p><p>  else a_min<=a_min +

59、 1;</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  if hour_tune='1' then</p><p>  if a_hour=23 then a_hour<=0;</p>

60、<p>  else a_hour<=a_hour + 1;</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  disp <= '1';</p><p>  elsif stop = &#

61、39;1' and ok = '1' then --down counting</p><p>  if a_sec = 0 then</p><p>  if a_min = 0 then</p><p>  if a_hour=0 then index<='1' ;</p><p>  di

62、sp<='0';</p><p>  else a_hour<=a_hour - 1;</p><p>  a_min<=59;</p><p>  a_sec<=59;</p><p><b>  end if;</b></p><p>  else a_

63、min<=a_min - 1;</p><p>  a_sec<=59;</p><p><b>  end if;</b></p><p>  else a_sec <= a_sec - 1;</p><p>  index <= '0';</p><p>

64、;  disp <= '1' ;</p><p><b>  end if;</b></p><p>  else disp<='0';</p><p><b>  end if;</b></p><p><b>  end if;</b&

65、gt;</p><p>  end process;</p><p>  stop_sec <= a_sec;</p><p>  stop_min <= a_min;</p><p>  stop_hour <= a_hour; </p><p><b>  end arch;</b

66、></p><p>  stop:時(shí)器設(shè)定動(dòng)作按鍵 </p><p>  ok: 任何設(shè)定動(dòng)作的確認(rèn)</p><p>  stop_sec,stop_min:秒、分計(jì)時(shí)終了的指針;</p><p>  stop_hour: 小時(shí)計(jì)時(shí)終了的指針;</p><p>  index:定時(shí)器計(jì)時(shí)終

67、了指針;</p><p>  disp:輸出標(biāo)準(zhǔn)邏輯。</p><p>  3.6 鬧鐘設(shè)定模塊</p><p>  為了設(shè)定鬧鐘,我們?cè)O(shè)計(jì)了一個(gè)目標(biāo)時(shí)間調(diào)整程序。以1Hz的顯示速率來(lái)調(diào)整時(shí)分秒的顯示,可以適應(yīng)視覺要求。將alarm的指撥開關(guān)轉(zhuǎn)成on時(shí),6個(gè)數(shù)字即顯示00:00:00,以等待輸入。當(dāng)持續(xù)按住調(diào)秒鍵sec_tune時(shí),秒針將從0持續(xù)增加至59后,再返

68、回O,任何時(shí)刻松開按鍵即顯示當(dāng)時(shí)的值。調(diào)分鍵與調(diào)時(shí)鍵的動(dòng)作原理相同,此時(shí)ok指撥開關(guān)仍在off狀態(tài)。</p><p>  圖9 鬧鐘設(shè)定與時(shí)間對(duì)比功能模塊引腳說明圖</p><p>  鬧鐘設(shè)定模塊的源程序如下:</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all;&l

69、t;/p><p>  use ieee.std_logic_arith.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity alarm_set is --設(shè)定鬧鐘表時(shí)間隔 </p><p>  port( rst,hz1: in std_logic;--sys

70、tem clock 1hz</p><p>  alarm, ok: in std_logic; --keep pushing to declare alarm set</p><p>  -- alarm: 鬧鐘設(shè)定按鍵信號(hào);ok: 任何設(shè)定動(dòng)作的確認(rèn)鍵; </p><p>  sec_tune: in std_logic; -

71、- keep pushing to declare second tuning</p><p>  min_tune: in std_logic; -- keep pushing to declare minute tuning</p><p>  hour_tune: in std_logic; --keep pushing to declare hour tuning</p&g

72、t;<p>  sec,min: out integer range 0 to 59;</p><p>  hour: out integer range 0 to 23); </p><p><b>  end;</b></p><p>  --define the signal_structure and _flow of t

73、he device </p><p>  architecture arch of alarm_set is</p><p>  signal sec_tmp,min_tmp: integer range 0 to 59;</p><p>  signal hour_tmp: integer range 0 to 23; </p><p>&

74、lt;b>  begin</b></p><p>  tuning:process(rst,hz1,alarm, ok)</p><p><b>  begin</b></p><p>  if rst='1' then sec_tmp<=0; min_tmp<=0; hour_tmp<=0

75、;</p><p>  elsif rising_edge(hz1) then</p><p>  if alarm='1' and ok='0' then</p><p>  if sec_tune='1' then</p><p>  if sec_tmp=59 then sec_tmp

76、<=0;</p><p>  else sec_tmp<=sec_tmp + 1;</p><p><b>  end if; </b></p><p><b>  end if;</b></p><p>  if min_tune='1' then</p>

77、;<p>  if min_tmp=59 then min_tmp<=0;</p><p>  else min_tmp<=min_tmp + 1;</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  

78、if hour_tune='1' then</p><p>  if hour_tmp=23 then hour_tmp<=0;</p><p>  else hour_tmp<=hour_tmp +1;</p><p><b>  end if;</b></p><p><b> 

79、 end if;</b></p><p><b>  else</b></p><p><b>  null;</b></p><p><b>  end if;</b></p><p><b>  end if;</b></p>

80、<p>  end process tuning;</p><p>  sec<=sec_tmp;</p><p>  min<=min_tmp;</p><p>  hour<=hour_tmp; </p><p><b>  end arch;</b></p><p&

81、gt;  reset:系統(tǒng)內(nèi)部重置信號(hào);</p><p>  reset為復(fù)位信號(hào)</p><p>  clock:由外接信號(hào)發(fā)生器提供1Hz的系統(tǒng)時(shí)鐘信號(hào);</p><p>  alarm: 鬧鐘設(shè)定按鍵信號(hào);</p><p>  stop: 定時(shí)器設(shè)定動(dòng)作按鍵:</p><p>  ok: 任何設(shè)定動(dòng)作的確認(rèn)鍵;

82、</p><p>  sec_tune: 秒數(shù)調(diào)整的按鍵信號(hào);</p><p>  min_tune: 分?jǐn)?shù)調(diào)整的按鍵信號(hào);</p><p>  hour__tune: 時(shí)數(shù)調(diào)整的按鍵信號(hào)。</p><p>  3.7 數(shù)據(jù)選擇模塊</p><p>  通常6個(gè)時(shí)分秒數(shù)字所顯示的是正常的計(jì)數(shù)時(shí)鐘,但

83、在鬧鐘與定時(shí)器時(shí)間設(shè)定過程中,必須顯示正在設(shè)定的鬧鈴時(shí)間或定時(shí)器計(jì)時(shí)時(shí)間。另外,在定時(shí)器計(jì)時(shí)過程中,為了觀察進(jìn)行時(shí)間,必須顯示正在計(jì)時(shí)的剩余時(shí)間。最后利用組件將輸出時(shí)間由整數(shù)形式轉(zhuǎn)換成BCD形式。其模塊引腳說明如圖10所示:</p><p>  圖10 數(shù)據(jù)選擇模塊引腳說明圖</p><p>  數(shù)據(jù)選擇模塊程序如下</p><p>  library ieee;

84、</p><p>  use ieee.std_logic_1164.all;</p><p>  use ieee.std_logic_arith.all;</p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity coji is</p><p>  po

85、rt( n_sec,n_min: in integer range 0 to 59;</p><p>  n_hour: in integer range 0 to 23;</p><p>  s_sec, s_min: integer range 0 to 59;</p><p>  s_hour: in intege

86、r range 0 to 23;</p><p>  stop_index, stop_disp : in std_logic;</p><p>  second, minute : out integer range 0 to 59;</p><p>  a_sec,a_min: in integer range 0 to 59;</p>&l

87、t;p>  a_hour: in integer range 0 to 23;</p><p>  rst: in std_logic;--power reset to initialize</p><p>  clk: in std_logic;--system clock 1024hz</p><p>  alarm: in std_log

88、ic;--dip switch for alarm setting</p><p>  ok: in std_logic; --push button to confirrn any setting operation</p><p>  hourr : out integer range 0 to 23;</p><p>  led_alarm: out s

89、td_logic; </p><p>  led_stop: out std_logic);</p><p><b>  end;</b></p><p>  architecture arch of coji is</p><p>  signal alarm_index : std_logic;</p>

90、<p>  signal alarm_disp : std_logic;</p><p><b>  begin</b></p><p>  p1:process(rst,stop_index)</p><p><b>  begin</b></p><p>  if rst='

91、1' then led_stop<='0';</p><p>  elsif rising_edge(stop_index) then</p><p>  led_stop<='1';</p><p><b>  end if;</b></p><p>  end

92、process p1;</p><p>  p2:process(alarm,ok)</p><p><b>  begin</b></p><p>  if rst='1' then alarm_index <= '0';</p><p>  elsif alarm='1&

93、#39; and ok='1' then</p><p>  if (a_sec = n_sec and a_min = n_min and a_hour=n_hour)</p><p>  then alarm_index <= '1';</p><p>  else alarm_index <= '0'

94、;</p><p><b>  end if;</b></p><p><b>  end if;</b></p><p>  alarm_disp <= (alarm and not ok) and not alarm_index;</p><p>  end process p2;<

95、/p><p>  p3: process(rst,alarm_index)</p><p><b>  begin</b></p><p>  if rst='1' then led_alarm <= '0';</p><p>  elsif rising_edge(alarm_inde

96、x) then</p><p>  led_alarm <= '1';</p><p><b>  end if;</b></p><p>  end process p3; </p><p>  p4: process(clk, stop_disp,alarm_disp)</p>

97、<p><b>  begin</b></p><p>  if rising_edge(clk) then</p><p>  if stop_disp='1' then second <= s_sec; minute <= s_min; hourr <= s_hour;</p><p>  els

98、if alarm_disp='1' then second <= a_sec; minute <= a_min; hourr <= a_hour;</p><p>  else second <= n_sec; minute <= n_min; hourr <= n_hour;</p><p>  end if; </p&g

99、t;<p><b>  end if; </b></p><p>  end process p4;</p><p><b>  end;</b></p><p>  out std_logic_vector(6 downto 0);--分與秒4個(gè)數(shù)字多路掃描輸出,可顯示在七段顯示器中</p>

100、<p>  p1,p2,p3,p4:out std_logic;--分與秒4個(gè)數(shù)字多路掃描電源激活輸出  seg2:out std_logic_vector(6 downto 0);--時(shí)的2個(gè)數(shù)字多路掃描輸出,可顯示在七段顯示器中</p><p>  3.8 譯碼掃描輸出模塊</p><p>  譯碼由時(shí),分,秒的譯碼所組成,掃描輸出由分秒掃描輸出電路和時(shí)掃描輸

101、出電路組成。為了節(jié)省IC的輸出引腳及耗電量,可以將4組數(shù)字輸出或2組數(shù)字輸出作為多路輸出,故所需引腳數(shù)由28降至7個(gè),14降至7個(gè);另外使用四合一型七段顯示器與視覺暫留效應(yīng)可降低顯示耗電量3/4。首先將6個(gè)數(shù)字通過 bin21ed組件由BCD碼轉(zhuǎn)換成七段顯示器碼,然后分別將分秒的4個(gè)數(shù)字通過scan4組件掃描輸出,而將小時(shí)數(shù)的2個(gè)數(shù)字通過scan2組件掃描輸出,最后完成整個(gè)電子鐘的功能。其電路原理圖如下圖所示:</p>&

102、lt;p>  圖11 譯碼掃描輸出模塊原理圖</p><p>  3.8.1分秒譯碼顯示的引腳說明圖及程序</p><p>  分秒譯碼顯示源程序如下:</p><p>  library ieee; </p><p>  use ieee.std_logic_1164.all; </p><p>  use i

103、eee.std_logic_arith.all; </p><p>  use ieee.std_logic_unsigned.all;</p><p>  entity i60bcd is</p><p>  port (interg : in integer range 0 to 59;--interger number</p><p>

104、  ten : out std_logic_vector (3 downto 0); --decimal bit</p><p>  one : out std_logic_vector (3 downto 0)); --ndividual bit </p><p>  end i60bcd; </p><p>  architecture arch of

105、i60bcd is</p><p><b>  begin</b></p><p>  process (interg)</p><p><b>  begin</b></p><p>  case interg is</p><p>  when 0|10|20|30|40

106、|50 => one<="0000";</p><p>  when 1|11|21|31|41|51 => one<="0001";</p><p>  when 2|12|22|32|42|52 => one<="0010";</p><p>  when 3|13|

107、23|33|43|53 => one<="0011";</p><p>  when 4|14|24|34|44|54 => one<="0100";</p><p>  when 5|15|25|35|45|55 => one<="0101";</p><p>  wh

108、en 6|16|26|36|46|56 => one<="0110";</p><p>  when 7|17|27|37|47|57 => one<="0111";</p><p>  when 8|18|28|38|48|58 => one<="1000";</p><p

109、>  when 9|19|29|39|49|59 => one<="1001";</p><p>  when others => one<="1110";</p><p><b>  end case;</b></p><p>  case interg is</p&

110、gt;<p>  when 0|1|2|3|4|5|6|7|8|9 => ten<="0000";</p><p>  when 10|11|12|13|14|15|16|17|18|19 => ten<="0001";</p><p>  when 20|21|22|23|24|25|26|27|28|29 =

111、> ten<="0010";</p><p>  when 30|31|32|33|34|35|36|37|38|39 => ten<="0011";</p><p>  when 40|41|42|43|44|45|46|47|48|49 => ten<="0100";</p>

112、<p>  when 50|51|52|53|54|55|56|57|58|59 => ten<="0101";</p><p>  when others => ten<="1110";</p><p><b>  end case;</b></p><p>  end

113、 process; </p><p><b>  end arch;</b></p><p>  interg:規(guī)定集成輸出范圍信號(hào)。</p><p><b>  輸出端口說明:</b></p><p>  ten、one:十位、個(gè)位輸出。</p><p>  3.8.2 時(shí)

114、鐘譯碼顯示的引腳說明圖及程序</p><p>  時(shí)鐘譯碼顯示源程序如下</p><p>  library ieee;</p><p>  use ieee.std_logic_1164.all; </p><p>  use ieee.std_logic_arith.all; </p><p>  use ieee

115、.std_logic_unsigned.all; </p><p>  entity i24bcd is</p><p>  port (interg : in integer range 0 to 23;--interger number</p><p>  ten : out std_logic_vector(3 downto 0) ;--decimal bi

116、t</p><p>  one : out std_logic_vector(3 downto 0) );--individual bit </p><p>  end i24bcd;</p><p>  architecture arch of i24bcd is</p><p><b>  begin</b><

117、/p><p>  process(interg)</p><p><b>  begin</b></p><p>  case interg is</p><p>  when 0|10|20 => one <="0000";</p><p>  when 1|11|2

118、1 => one<="0001";</p><p>  when 2|12|22 => one<="0010";</p><p>  when 3|13|23 => one <="0011";</p><p>  when 4|14 => one<="

119、;0100";</p><p>  when 5|15 => one<="0101";</p><p>  when 6|16 => one<="0110";</p><p>  when 7|17 => one<="0111";</p><

120、p>  when 8|18 => one<="1000";</p><p>  when 9|19 => one<="1001";</p><p>  when others => one <= "1110";</p><p><b>  end cas

121、e;</b></p><p>  case interg is</p><p>  when 0|1|2|3|4|5|6|7|8|9 => ten<="0000";</p><p>  when 10|11|12|13|14|15|16|17|18|19 => ten<="0001";<

122、;/p><p>  when 20|21|22|23 => ten<="0010";</p><p>  when others => ten <= "1110" ;</p><p><b>  end case;</b></p><p>  end pro

123、cess;</p><p><b>  end arch;</b></p><p>  interg:規(guī)定集成輸出范圍信號(hào)。</p><p><b>  輸出端口說明:</b></p><p>  ten、one:十位、個(gè)位輸出</p><p>  3.8.3 譯碼顯示的的

124、引腳說明圖及程序</p><p>  譯碼顯示的源程序如下:</p><p>  library ieee; </p><p>  use ieee.std_logic_1164.all; </p><p>  use ieee.std_logic_unsigned.all; </p><p>  use ieee.s

125、td_logic_arith.all; </p><p>  entity bin21ed is </p><p>  port (bin : in std_logic_vector(3 downto 0); --internal binary number</p><p>  led : out std_logic_vector(6 downto 0) );-

126、-7_segments led display</p><p>  end bin21ed; </p><p>  architecture arch of bin21ed is </p><p>  begin -- segment encoding</p><p>  with bin select</p><p&

127、gt;  led <= "1111001" when "0001",--1</p><p>  "0100100" when "0010" , --2</p><p>  "0110000" when "0011" ,--3</p><

128、;p>  "0011001" when "0100" ,--4</p><p>  "0010010" when "0101",--5</p><p>  "0000010" when "0110", -- 6</p><p> 

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論