基于FPGA數(shù)字跑表的設(shè)計(jì)_第1頁(yè)
基于FPGA數(shù)字跑表的設(shè)計(jì)_第2頁(yè)
基于FPGA數(shù)字跑表的設(shè)計(jì)_第3頁(yè)
基于FPGA數(shù)字跑表的設(shè)計(jì)_第4頁(yè)
基于FPGA數(shù)字跑表的設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、21現(xiàn)代電子技術(shù)實(shí)驗(yàn)報(bào)告數(shù)字跑表的設(shè)計(jì) 目 錄 2 一、基于FPGA的VHDL設(shè)計(jì)流程.3 1.1 VHDL語(yǔ)言介紹.3 1.1.1 VHDL的特點(diǎn). 3 1.2 FPGA開(kāi)發(fā)介紹. 4 1.2.1 FPGA簡(jiǎn)介. 4 1.2.2 FPGA設(shè)計(jì)流程. 4 1.2.3 實(shí)驗(yàn)板使用芯片XC3S200A介紹 6 二、總體電路的設(shè)計(jì)6 2.1設(shè)計(jì)要求 .6 2.2系統(tǒng)工作原理6 2.3單元電路的劃分.6 三、電子秒表的單元電路設(shè)計(jì).7 3.1 電子秒表的設(shè)計(jì)過(guò)程及結(jié)果分析.7 3.1.1 分頻器.7 3.1.2按鍵消抖.8 3.1.3 控制電路.8 3.1.4 計(jì)數(shù)器.9 3.1.5 寄存器.12 3

2、.1.6 顯示模塊.15 3.1.7 使能模塊.17 四、 頂層設(shè)計(jì).18 4.1 頂層設(shè)計(jì).18 4.2 分配引腳和下載實(shí)現(xiàn).19 4.3 測(cè)試結(jié)果及結(jié)論.20 五、 經(jīng)驗(yàn)及收獲.22一、基于FPGA的VHDL設(shè)計(jì)流程1.1 VHDL語(yǔ)言介紹VHDL(Very-high-speed Integrated Circuit Hardware Description Language)誕生于1982年.1987年底,VHDL被IEEE(The Institute of Electrical and Electronics Engineers)和美國(guó)國(guó)防部確認(rèn)為標(biāo)準(zhǔn)硬件描述語(yǔ)言.自IEEE公布了VH

3、DL的標(biāo)準(zhǔn)版本(IEEE-1076)之后,各EDA公司相繼推出了自己的VHDL設(shè)計(jì)環(huán)境,并宣布自己的設(shè)計(jì)工具可以和VHDL接口.此后VHDL在電子設(shè)計(jì)領(lǐng)域得到了廣泛的接受,并逐步取代了原有的非標(biāo)準(zhǔn)硬件描述語(yǔ)言.1993年,IEEE對(duì)VHDL進(jìn)行了修訂,從更高的抽象層次和系統(tǒng)描述能力上擴(kuò)展VHDL的內(nèi)容,公布了新版本的VHDL,即IEEE標(biāo)準(zhǔn)的1076-1993版本.現(xiàn)在,VHDL和VERILOG作為IEEE的工業(yè)標(biāo)準(zhǔn)硬件描述語(yǔ)言,又得到眾多EDA公司的支持,在電子工程領(lǐng)域,已成為事實(shí)上的通用硬件描述語(yǔ)言.有專家認(rèn)為,在新的世紀(jì)中,VHDL和VERILOG語(yǔ)言將承擔(dān)起幾乎全部的數(shù)字系統(tǒng)設(shè)計(jì)任務(wù).

4、1.1.1 VHDL語(yǔ)言的特點(diǎn)與其他硬件描述語(yǔ)言相比,VHDL具有以下特點(diǎn):1、功能強(qiáng)大、設(shè)計(jì)靈活:VHDL具有功能強(qiáng)大的語(yǔ)言結(jié)構(gòu),可以用簡(jiǎn)潔明確的源代碼來(lái)描述復(fù)雜的邏輯控制.它具有多層次的設(shè)計(jì)描述功能,層層細(xì)化,最后可直接生成電路級(jí)描述.VHDL支持同步電路、異步電路和隨機(jī)電路的設(shè)計(jì),這是其他硬件描述語(yǔ)言所不能比擬的.VHDL還支持各種設(shè)計(jì)方法,既支持自底向上的設(shè)計(jì),又支持自頂向下的設(shè)計(jì);既支持模塊化設(shè)計(jì),又支持層次化設(shè)計(jì).2、支持廣泛、易于修改:由于VHDL已經(jīng)成為IEEE標(biāo)準(zhǔn)所規(guī)范的硬件描述語(yǔ)言,大多數(shù)EDA工幾乎都支持VHDL,這為VHDL的進(jìn)一步推廣和廣泛應(yīng)用奠定了基礎(chǔ).在硬件電路設(shè)

5、計(jì)過(guò)程中,主要的設(shè)計(jì)文件是用VHDL編寫(xiě)的源代碼,因?yàn)閂HDL易讀和結(jié)構(gòu)化,所以易于修改設(shè)計(jì).3、強(qiáng)大的系統(tǒng)硬件描述能力:VHDL具有多層次的設(shè)計(jì)描述功能,既可以描述系統(tǒng)級(jí)電路,又可以描述門(mén)級(jí)電路.而描述既可以采用行為描述、寄存器傳輸描述或結(jié)構(gòu)描述,也可以采用三者混合的混合級(jí)描述.另外,VHDL支持慣性延遲和傳輸延遲,還可以準(zhǔn)確地建立硬件電路模型.VHDL支持預(yù)定義的和自定義的數(shù)據(jù)類型,給硬件描述帶來(lái)較大的自由度,使設(shè)計(jì)人員能夠方便地創(chuàng)建高層次的系統(tǒng)模型.4、獨(dú)立于器件的設(shè)計(jì)、與工藝無(wú)關(guān):設(shè)計(jì)人員用VHDL進(jìn)行設(shè)計(jì)時(shí),不需要首先考慮選擇完成設(shè)計(jì)的器件,就可以集中精力進(jìn)行設(shè)計(jì)的優(yōu)化.當(dāng)設(shè)計(jì)描述完

6、成后,可以用多種不同的器件結(jié)構(gòu)來(lái)實(shí)現(xiàn)其功能.5、很強(qiáng)的移植能力:VHDL是一種標(biāo)準(zhǔn)化的硬件描述語(yǔ)言,同一個(gè)設(shè)計(jì)描述可以被不同的工具所支持,使得設(shè)計(jì)描述的移植成為可能.6、易于共享和復(fù)用:VHDL采用基于庫(kù)(Library)的設(shè)計(jì)方法,可以建立各種可再次利用的模塊.這些模塊可以預(yù)先設(shè)計(jì)或使用以前設(shè)計(jì)中的存檔模塊,將這些模塊存放到庫(kù)中,就可以在以后的設(shè)計(jì)中進(jìn)行復(fù)用,可以使設(shè)計(jì)成果在設(shè)計(jì)人員之間進(jìn)行交流和共享,減少硬件電路設(shè)計(jì).1.2 FPGA開(kāi)發(fā)介紹現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)器件是八十年代中期出現(xiàn)的新產(chǎn)品,它的應(yīng)用大大地方便了IC的設(shè)計(jì),因而隨著數(shù)字技術(shù)日益廣泛的應(yīng)用,以FPGA為代表的ASIC

7、器件得到了迅速的普及和發(fā)展,器件集成度和速度都在高速增長(zhǎng).傳統(tǒng)的電路設(shè)計(jì)過(guò)程是:先畫(huà)原理圖、把原理圖繪制成印制電路板圖、再制版、安裝、調(diào)試.有了FPGA,我們只需要在計(jì)算機(jī)上繪出原理圖,再運(yùn)行相應(yīng)的軟件,就可把所設(shè)計(jì)的邏輯電路在FPGA中實(shí)現(xiàn).所有步驟均可自動(dòng)完成.電子設(shè)計(jì)工程師自己設(shè)計(jì)專用集成電路成為了一件很容易的事情.FPGA作為專用集成電路(ASIC)概念上的一個(gè)新型范疇和門(mén)類,以其高度靈活的用戶現(xiàn)場(chǎng)編程方式,現(xiàn)場(chǎng)定義高容量數(shù)字單片系統(tǒng)的能力,能夠重復(fù)定義、反復(fù)改寫(xiě)的新穎功能,為復(fù)雜數(shù)字系統(tǒng)設(shè)計(jì)、研制以及產(chǎn)品開(kāi)發(fā)提供了有效的技術(shù)手段.電子應(yīng)用設(shè)計(jì)工程師應(yīng)用FPGA技術(shù)不僅可避免通常ASI

8、C單片系統(tǒng)設(shè)計(jì)周期長(zhǎng),前期投資風(fēng)險(xiǎn)大的弱點(diǎn),而且克服了過(guò)去板級(jí)通用數(shù)字電路應(yīng)用設(shè)計(jì)的落后,繁瑣和不可靠性.目前FPGA的兩個(gè)重要發(fā)展與突破是,大多數(shù)廠商在其高端器件上都提供了片上的處理器(如CPU、DSP)等硬核(Hard Core)或固化核(Fixed Core).比如Xilinx的Virtex II Pro芯片可以提供Power PC,而Altera的Stratix、Excalibur等系列芯片可以提供Nios、DSP和Arm等模塊.在FPGA上集成微處理器,使SOPC設(shè)計(jì)更加便利與強(qiáng)大.另一個(gè)發(fā)展是在不同器件商推出的高端芯片上大都集成了高速串行收發(fā)器,一般能夠達(dá)到3Gb/s以上的數(shù)據(jù)處理

9、能力,在Xilinx、Altera、Lattice都有相應(yīng)的器件型號(hào)提供該功能.這些新功能使FPGA的數(shù)據(jù)吞吐能力大幅度增強(qiáng).1.2.2 FPGA設(shè)計(jì)流程對(duì)于目標(biāo)器件為FPGA和CPLD的HDL設(shè)計(jì),其工程設(shè)計(jì)的基本流程如圖: 圖1FPGA設(shè)計(jì)流程圖1、文本編輯用任何文本編輯器都可以進(jìn)行,通常VHDL文件保存為vhd文件,Verilog文件保存為v文件.2、使用編譯工具編譯源文件HDL的編譯器有很多,ACTIVE公司,MODELSIM公司,SYNPLICITY公司,SYNOPSYS公司,VERIBEST公司等都有自己的編譯器.3、邏輯綜合將源文件調(diào)入邏輯綜合軟件進(jìn)行綜合.綜合的目的是在于將設(shè)計(jì)

10、的源文件由語(yǔ)言轉(zhuǎn)換為實(shí)際的電路.但是此時(shí)還沒(méi)有在芯片中形成真正的電路.這一步的最終目的是生成門(mén)電路級(jí)的網(wǎng)表(Netlist).4、布局、布線將第3步生成的網(wǎng)表文件調(diào)入PLD廠家提供的軟件中進(jìn)行布線,即把設(shè)計(jì)好的邏輯安放到CPLDFPGA內(nèi).這一步的目的是生成用于下載(編程Programming)的編程文件.在這一步,將用到第3步生成的網(wǎng)表,并根據(jù)CPLDFPGA廠商的器件容量,結(jié)構(gòu)等進(jìn)行布局、布線.這就好像在設(shè)計(jì)PCB時(shí)的布局布線一樣.先將各個(gè)設(shè)計(jì)中的門(mén)根據(jù)網(wǎng)表的內(nèi)容和器件的結(jié)構(gòu)放在器件的特定部位.然后,在根據(jù)網(wǎng)表中提供的各門(mén)的連接,把各個(gè)門(mén)的輸入輸出連接起來(lái).最后,生成一個(gè)供編程的文件.這一

11、步同時(shí)還會(huì)加一些時(shí)序信息(Timing)到你的設(shè)計(jì)項(xiàng)目中去,以便于你做后仿真.5、后仿真利用在布局布線中獲得的精確參數(shù),用仿真軟件驗(yàn)證電路的時(shí)序.(也叫布局布線仿真或時(shí)序仿真).這一步主要是為了確定你的設(shè)計(jì)在經(jīng)過(guò)布局布線之后,是不是還滿足你的設(shè)計(jì)要求.6、編程,下載如果前幾步都沒(méi)有發(fā)生錯(cuò)誤,并且符合設(shè)計(jì)要求,這一步就可以將由適配器等產(chǎn)生的配置或下載文件通過(guò)編程器或下載電纜下載到目標(biāo)芯片中.7、硬件測(cè)試硬件測(cè)試的目的是為了在更真實(shí)的環(huán)境中檢驗(yàn)HDL設(shè)計(jì)的運(yùn)行情況,特別是對(duì)于HDL程序設(shè)計(jì)上不是十分規(guī)范,語(yǔ)義上含有一定歧義的程序.1.2.3 實(shí)驗(yàn)板使用芯片XC3S200A介紹本實(shí)驗(yàn)設(shè)計(jì)中采用的是X

12、ilinx公司的ETL-001 FPGA開(kāi)發(fā)板進(jìn)行開(kāi)發(fā)設(shè)計(jì),該開(kāi)發(fā)板所提供的主芯片XC3S200A是Xilinx公司最新推出的90nm半導(dǎo)體工藝的低端低成本的FPGA芯片,可以廣泛地運(yùn)用在通信,軍事,電力,控制,消費(fèi)電子,汽車電子絕大多數(shù)電子應(yīng)用領(lǐng)域.芯片主要特性如下表1所示:表1實(shí)驗(yàn)板X(qián)C3S200A該芯片是基于SRAM工藝的超大規(guī)??删幊踢壿嬓酒?提供了高達(dá)20萬(wàn)的等效系統(tǒng)門(mén),3854個(gè)查找表(LUT),3854個(gè)寄存器(FF),288Kbit的塊狀SRAM以及16個(gè)18*18的乘法器,以及60對(duì)差分I/O,LVD.芯片主要特性如上表示.二、系統(tǒng)總體設(shè)計(jì)2.1 電子秒表的設(shè)計(jì)任務(wù)目標(biāo) 1、

13、跑表精度為0.01秒 2、跑表計(jì)時(shí)范圍為:1小時(shí) 3、設(shè)置開(kāi)始計(jì)時(shí)/停止計(jì)時(shí)、復(fù)位兩個(gè)按鈕 4、顯示工作方式:用六位BCD七段數(shù)碼管顯示讀數(shù).顯示格式:00:00:00 擴(kuò)展功能: 按鍵消抖; 選手時(shí)間分時(shí)顯示;2.2系統(tǒng)工作原理 系統(tǒng)基本流程圖如圖:圖1系統(tǒng)基本流程圖2.3單元電路的劃分根據(jù)要求設(shè)計(jì)的電路包括以下幾個(gè)模塊:1.分頻器:由于我們要以1ms為最小單位進(jìn)行計(jì)時(shí).分頻器的功能是對(duì)晶體振蕩器產(chǎn)生的48MHz時(shí)鐘信號(hào)進(jìn)行分頻,產(chǎn)生1KHz的基準(zhǔn)信號(hào),對(duì)晶體振蕩器產(chǎn)生的時(shí)鐘信號(hào)進(jìn)行分頻,產(chǎn)生時(shí)間基準(zhǔn)信號(hào).2.計(jì)數(shù)鎖存器:由于我們要實(shí)現(xiàn)按不同的鍵讓秒表產(chǎn)生不同的反應(yīng).所以需要這個(gè)模塊對(duì)時(shí)間基

14、準(zhǔn)脈沖進(jìn)行計(jì)數(shù),完成計(jì)時(shí)功能.并完成對(duì)數(shù)據(jù)的鎖存使顯示保持暫停.3.控制器:由于我們要實(shí)現(xiàn)按不同的鍵讓秒表產(chǎn)生不同的反應(yīng).所以需要這個(gè)模塊控制計(jì)數(shù)器的運(yùn)行、停止以及復(fù)位,產(chǎn)生鎖存器的使能信號(hào).4.按鍵消抖電路:由于普通按鍵會(huì)產(chǎn)生抖動(dòng)現(xiàn)象,只按一下,可能出現(xiàn)多次抖動(dòng)的現(xiàn)象,使按鍵不靈敏.所以需要消除按鍵輸入信號(hào)抖動(dòng)的影響,輸出單脈沖.5.掃描顯示的控制電路:包括掃描計(jì)數(shù)器、數(shù)據(jù)選擇器和7段譯碼器,控制8個(gè)數(shù)碼管以掃描方式顯示計(jì)時(shí)結(jié)果.單元電路劃分總框圖如下圖2:圖2單元電路劃分總框圖三、單元電路設(shè)計(jì)3.1單元電路設(shè)計(jì)思路3.1.1分頻器分頻器的功能是對(duì)晶體振蕩器產(chǎn)生的48MHz時(shí)鐘信號(hào)進(jìn)行分頻,

15、產(chǎn)生1KHz和100Hz的基準(zhǔn)信號(hào).對(duì)于頻率為1khz的信號(hào),分頻系數(shù)為48000,因此需要一個(gè)24000進(jìn)制的計(jì)數(shù)器,每當(dāng)計(jì)數(shù)24000個(gè)時(shí)鐘,分頻輸出信號(hào)c1000取反一次,c1000取反兩次得到一個(gè)周期的信號(hào).這樣可實(shí)現(xiàn)對(duì)輸入時(shí)鐘信號(hào)的4800次分頻,從而得到1khz的信號(hào).對(duì)于頻率為100hz的信號(hào),原理相同,分頻系數(shù)為480000.生成的分頻器模塊如圖3所示:圖3分頻器模塊其中,clkin為48MHz晶振時(shí)鐘信號(hào);c1000為分頻輸出的1KHz時(shí)鐘信號(hào),c100為分頻輸出的100Hz時(shí)鐘信號(hào).設(shè)計(jì)程序如下:library IEEE;use IEEE.STD_LOGIC_1164.AL

16、L;use IEEE.STD_LOGIC_arith.ALL;use IEEE.STD_LOGIC_unsigned.ALL;entity fdiv is Port ( clkin : in STD_LOGIC; c1000 : out STD_LOGIC; c100 : out STD_LOGIC);end fdiv;architecture Behavioral of fdiv issignal c1000_temp:integer range 0 to 23999:=0;signal c100_temp:integer range 0 to 239999:=0;signal fd1000

17、,fd100:STD_LOGIC:='0'begin process (clkin) is begin if rising_edge(clkin) then if c1000_temp=23999 then c1000_temp<=0;fd1000<= not fd1000;else c1000_temp<=c1000_temp+1; end if;end if;end process;c1000 <=fd1000;process (clkin) isbegin if rising_edge(clkin) then if c100_temp=239999

18、 then c100_temp<=0;fd100<= not fd100; else c100_temp<=c100_temp+1; end if; end if;end process;c100 <=fd100;end Behavioral;仿真波形圖4如下圖4分頻器仿真波形由仿真波形可知,分頻器的設(shè)計(jì)是符合預(yù)期期望的,當(dāng)產(chǎn)生輸入晶振信號(hào)時(shí),經(jīng)過(guò)分頻器內(nèi)部處理的信號(hào)最終產(chǎn)生兩個(gè)輸出信號(hào),分別是1KHz和100Hz,由波形圖可以看出,當(dāng)時(shí)鐘信號(hào)計(jì)數(shù)24000個(gè)脈沖時(shí),1KZ的波形翻轉(zhuǎn)一次,從而產(chǎn)生1KZ的信號(hào);同理,100Hz的信號(hào)也符合預(yù)期設(shè)計(jì).3.1.2按鍵消抖由于

19、實(shí)驗(yàn)板上的按鍵,在按下和松開(kāi)的短暫時(shí)間里,會(huì)出現(xiàn)抖動(dòng)現(xiàn)象,這樣會(huì)嚴(yán)重影響按鍵的效果,故此需要設(shè)計(jì)一個(gè)消抖電路,來(lái)消除這種不利的影響,按鍵消抖電路不僅可以消除按鍵抖動(dòng)的影響,而且每按一次鍵,只輸出一個(gè)脈沖,其寬度為一個(gè)時(shí)鐘周期,達(dá)到整形的作用, 按鍵消抖電路是利用時(shí)間基準(zhǔn)信號(hào)對(duì)按鍵按下時(shí)產(chǎn)生的抖動(dòng)進(jìn)行整形,使其輸出為正常的脈沖信號(hào)的.消抖設(shè)計(jì)框圖5如下:圖5消抖模塊設(shè)計(jì)原理圖程序設(shè)計(jì)如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_unsigned.ALL;use IEEE.STD_LOGIC_arith.ALL;ent

20、ity XD is Port ( clk1k : in STD_LOGIC; keyin : in STD_LOGIC; keyout : out STD_LOGIC);end XD;architecture Behavioral of XD issignal key1,key2:std_logic;signal count:integer range 1 to 3:=1beginprocess(clk1k,keyin) begin if clk1k'event and clk1k='1' then if count=3 then key1<='1'

21、; else key1<='0' count<=count+1; end if; key2<=key1;end if; if keyin='0' then count<=1; end if; end process; keyout<=(not key1) and key2;end Behavioral;仿真波形圖6如下: 在按鍵按下的一個(gè)周期內(nèi),消抖模塊輸出僅有一個(gè)時(shí)鐘周期,抑制了按鍵按下?tīng)顟B(tài)不穩(wěn)的情況。3.1.3計(jì)數(shù)器十進(jìn)制計(jì)數(shù)器是每當(dāng)計(jì)數(shù)從1記到9時(shí),下一位產(chǎn)生一個(gè)進(jìn)位信號(hào),進(jìn)而輸入到下一個(gè)計(jì)數(shù)器的時(shí)鐘輸入端,進(jìn)而達(dá)到秒表所要求

22、的計(jì)數(shù)進(jìn)制.計(jì)數(shù)器是在時(shí)鐘基準(zhǔn)信號(hào)的情況下,分頻為我們需要的計(jì)時(shí)時(shí)間信號(hào),電子秒表的最低位為0.01秒,即需要100Hz的脈沖,當(dāng)最低一位計(jì)數(shù)滿9時(shí),向前進(jìn)1,同時(shí)自身為0,重復(fù)循環(huán).本設(shè)計(jì)中采用的是異步計(jì)時(shí)器,當(dāng)上一位計(jì)數(shù)到9時(shí),產(chǎn)生時(shí)鐘進(jìn)位,下一時(shí)鐘在進(jìn)位成立時(shí),開(kāi)始計(jì)時(shí)加1,以此內(nèi)推,最終輸出6組,計(jì)時(shí)信號(hào),分別是0.01秒位,0.1秒位,秒個(gè)位,秒十位,分個(gè)位,分十位.當(dāng)計(jì)數(shù)到5959 59時(shí)計(jì)數(shù)清零為0000 00 重復(fù)計(jì)時(shí).數(shù)字跑表需要用六位七段數(shù)碼管顯示,數(shù)碼管顯示數(shù)字分別用2個(gè)6進(jìn)制計(jì)數(shù)器和4個(gè)10進(jìn)制計(jì)數(shù)器對(duì)其計(jì)數(shù),從秒表顯示的右側(cè)到左側(cè)計(jì)數(shù)器分別為十進(jìn)制、十進(jìn)制、十進(jìn)制、六

23、進(jìn)制、十進(jìn)制、六進(jìn)制、十進(jìn)制計(jì)數(shù)器,如圖7所示: 圖7 數(shù)碼管顯示示意圖計(jì)數(shù)器的設(shè)計(jì)圖如下:10進(jìn)制計(jì)數(shù)器的框圖如下:圖8 10進(jìn)制計(jì)數(shù)器的框圖6進(jìn)制計(jì)數(shù)器的框圖如下:圖9 6進(jìn)制計(jì)數(shù)器的框圖相應(yīng)程序設(shè)計(jì)如下:10進(jìn)制程序設(shè)計(jì)如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_arith.ALL;use IEEE.STD_LOGIC_unsigned.ALL;entity count101 is Port ( rst : in STD_LOGIC; clk : in STD_LOGIC; carryin : in STD

24、_LOGIC; carryout : out STD_LOGIC; countout : out STD_LOGIC_VECTOR (3 downto 0);end count101;architecture Behavioral of count101 issignal count:STD_LOGIC_VECTOR (3 downto 0):="0000"begin process(clk,rst) begin if rst='1' then count<="0000" else if rising_edge (clk) then

25、 if carryin='1' then if count<"1001" then count<=count+1;else count<="0000"end if;end if;else null;end if;end if;end process;countout<=count;carryout<='1' when carryin='1' and count="1001" else '0'end Behavioral;6進(jìn)制程序設(shè)計(jì)如下:l

26、ibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_arith.ALL;use IEEE.STD_LOGIC_unsigned.ALL;entity count6 is Port ( rst : in STD_LOGIC; clk : in STD_LOGIC; carryin : in STD_LOGIC; carryout : out STD_LOGIC; countout : out STD_LOGIC_VECTOR (3 downto 0);end count6;architecture Behavioral of co

27、unt6 issignal count:STD_LOGIC_VECTOR (3 downto 0):="0000"begin process(clk,rst) begin if rst='1' then count<="0000" else if rising_edge (clk) then if carryin='1' then if count<"0101" then count<=count+1;else count<="0000"end if;end

28、if;else null;end if;end if;end process;countout<=count;carryout<='1' when carryin='1' and count="0101" else '0'end Behavioral;仿真波形如下圖:10進(jìn)制的仿真波形如下:圖10 10進(jìn)制計(jì)數(shù)器仿真圖形由圖可見(jiàn),設(shè)計(jì)模塊對(duì)波形個(gè)數(shù)計(jì)數(shù),從產(chǎn)生結(jié)果為2進(jìn)制的4位數(shù).從0000到1001,結(jié)果正確.6進(jìn)制的仿真波形如下:圖11 6進(jìn)制計(jì)數(shù)器的仿真波形有圖可知,6進(jìn)制計(jì)數(shù)器設(shè)計(jì)正確,脈沖時(shí)鐘上升沿到來(lái)時(shí)

29、計(jì)數(shù)器開(kāi)始計(jì)數(shù),從0000到1001,然后重復(fù)循環(huán).3.1.4 寄存器數(shù)據(jù)鎖存器,在使能為1時(shí),將當(dāng)前數(shù)據(jù)送到寄存器中保存,可記錄4組數(shù)據(jù),當(dāng)再次使能時(shí),將寄存的數(shù)據(jù)賦給輸出,顯示寄存器中的4組數(shù)據(jù).設(shè)計(jì)框圖如下圖:圖12 寄存器設(shè)計(jì)框圖寄存器程序設(shè)計(jì)如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;use IEEE.STD_LOGIC_ARITH.ALL;entity save2 is Port ( lacthin : in STD_LOGIC; reset : in STD_LOGIC;

30、mhin : in STD_LOGIC_VECTOR (3 downto 0); mlin : in STD_LOGIC_VECTOR (3 downto 0); shin : in STD_LOGIC_VECTOR (3 downto 0); slin : in STD_LOGIC_VECTOR (3 downto 0); dsin : in STD_LOGIC_VECTOR (3 downto 0); csin : in STD_LOGIC_VECTOR (3 downto 0); mhout : out STD_LOGIC_VECTOR (3 downto 0); mlout : out

31、 STD_LOGIC_VECTOR (3 downto 0); shout : out STD_LOGIC_VECTOR (3 downto 0); slout : out STD_LOGIC_VECTOR (3 downto 0); dsout : out STD_LOGIC_VECTOR (3 downto 0); csout : out STD_LOGIC_VECTOR (3 downto 0);end save2;architecture Behavioral of save2 issignal mh1out,ml1out,sh1out,sl1out,ds1out,cs1out:std

32、_logic_vector(3 downto 0);signal mh2out,ml2out,sh2out,sl2out,ds2out,cs2out:std_logic_vector(3 downto 0);signal mh3out,ml3out,sh3out,sl3out,ds3out,cs3out:std_logic_vector(3 downto 0);signal mh4out,ml4out,sh4out,sl4out,ds4out,cs4out:std_logic_vector(3 downto 0);signal mh11out,ml11out,sh11out,sl11out,d

33、s11out,cs11out:std_logic_vector(3 downto 0);signal count:std_logic_vector(3 downto 0):="0000"beginprocess(lacthin,reset) begin if reset='1' then count<="0000" elsif lacthin'event and lacthin='1' then if count="1000" then count<="0000"

34、 else count<=count+1; end if; end if;end process;process(count,mhin,mlin,shin,slin,dsin,csin)begin case count is when "0000"=> mh1out<=mhin;ml1out<=mlin;sh1out<=shin;sl1out<=slin;ds1out<=dsin;cs1out<=csin; mh11out<=mhin;ml11out<=mlin;sh11out<=shin;sl11out&l

35、t;=slin;ds11out<=dsin;cs11out<=csin; when "0001"=> mh2out<=mhin;ml2out<=mlin;sh2out<=shin;sl2out<=slin;ds2out<=dsin;cs2out<=csin; mh11out<=mhin;ml11out<=mlin;sh11out<=shin;sl11out<=slin;ds11out<=dsin;cs11out<=csin; when "0010"=> mh3

36、out<=mhin;ml3out<=mlin;sh3out<=shin;sl3out<=slin;ds3out<=dsin;cs3out<=csin; mh11out<=mhin;ml11out<=mlin;sh11out<=shin;sl11out<=slin;ds11out<=dsin;cs11out<=csin; when "0011"=> mh4out<=mhin;ml4out<=mlin;sh4out<=shin;sl4out<=slin;ds4out<=d

37、sin;cs4out<=csin; mh11out<=mhin;ml11out<=mlin;sh11out<=shin;sl11out<=slin;ds11out<=dsin;cs11out<=csin; when "0100"=>mh11out<=mhin;ml11out<=mlin;sh11out<=shin;sl11out<=slin;ds11out<=dsin;cs11out<=csin; when "0101"=> mh11out<=mh1out;m

38、l11out<=ml1out;sh11out<=sh1out;sl11out<=sl1out;ds11out<=ds1out;cs11out<=cs1out; when "0110"=> mh11out<=mh2out;ml11out<=ml2out;sh11out<=sh2out;sl11out<=sl2out;ds11out<=ds2out;cs11out<=cs2out; when "0111"=> mh11out<=mh3out;ml11out<=ml3ou

39、t;sh11out<=sh3out;sl11out<=sl3out;ds11out<=ds3out;cs11out<=cs3out; when "1000"=> mh11out<=mh4out;ml11out<=ml4out;sh11out<=sh4out;sl11out<=sl4out;ds11out<=ds4out;cs11out<=cs4out; when others=> mh11out<=mhin;ml11out<=mlin;sh11out<=shin;sl11out<

40、=slin;ds11out<=dsin;cs11out<=csin; end case;end process;mhout<=mh11out;mlout<=ml11out;shout<=sh11out;slout<=sl11out;dsout<=ds11out;csout<=cs11out;end Behavioral;寄存器仿真波形圖如下:由圖,在按鍵脈沖上升沿來(lái)到之前,輸入直接輸出,程序只進(jìn)行了對(duì)數(shù)據(jù)的存儲(chǔ)功能(由于截圖大小在報(bào)告中顯示范圍的有限,只記錄第4次按鍵及之后的圖形),當(dāng)?shù)谖宕?按下latchin時(shí),輸出為第一次按鍵時(shí)的輸入值,按第

41、6次時(shí),輸出為第二次記錄時(shí)的輸入值.依次類推,當(dāng)?shù)?次按鍵以后,再按第9次,程序又重復(fù)循環(huán).圖13 寄存器仿真波形圖3.1.5顯示控制模塊實(shí)驗(yàn)板上設(shè)計(jì)了8位7段數(shù)碼顯示,以便編程者將基本的數(shù)字信息通過(guò)數(shù)碼管顯示出來(lái),原理圖如下:圖15顯示控制原理圖在控制電路部分,使用了一組PNP三極管(Q1Q8)將正極的控制電平由高電平轉(zhuǎn)為低電平,這樣數(shù)碼管的位數(shù)和段位的控制都統(tǒng)一成了低電平有效.在位數(shù)控制部分加入了3-8譯碼器以簡(jiǎn)化位數(shù)編碼,用DIG接口的二進(jìn)制數(shù)據(jù)000111直接表示數(shù)碼管第一位到第八位的位選信號(hào).利用動(dòng)態(tài)掃描原理和設(shè)計(jì)要求,顯示控制模塊包含一個(gè)六選一數(shù)據(jù)器、三八譯碼器和七段譯碼器.六進(jìn)制

42、計(jì)數(shù)器通過(guò)cnt依次加1來(lái)控制使每次只將一路輸入數(shù)據(jù)賦給輸出,六選一數(shù)據(jù)選擇器利用cnt的依次加1來(lái)輪番從低位至高位選擇輸入口,三八譯碼器根據(jù)cnt的值判斷選擇輸入端,以完成顯示的位選.用case語(yǔ)句來(lái)決定當(dāng)輸入口決定以后,輸入口的數(shù)據(jù)要顯示為具體多少數(shù)值.此步驟對(duì)照數(shù)碼管的段選來(lái)完成. 原理框圖的設(shè)計(jì)如下所示:圖16 顯示控制模塊框圖具體程序設(shè)計(jì)如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_arith.ALL;use IEEE.STD_LOGIC_unsigned.ALL;entity contro is Por

43、t ( clk : in STD_LOGIC; mh : in STD_LOGIC_VECTOR (3 downto 0); ml : in STD_LOGIC_VECTOR (3 downto 0); sh : in STD_LOGIC_VECTOR (3 downto 0); sl : in STD_LOGIC_VECTOR (3 downto 0); ds : in STD_LOGIC_VECTOR (3 downto 0); cs : in STD_LOGIC_VECTOR (3 downto 0); sel : out STD_LOGIC_VECTOR (7 downto 0); l

44、ed7 : out STD_LOGIC_VECTOR (6 downto 0);end contro;architecture Behavioral of contro issignal cnt:STD_LOGIC_VECTOR (2 downto 0):="000"signal data:STD_LOGIC_VECTOR (3 downto 0);begin -scan choose 1 from 6 process(clk) begin if rising_edge (clk) then if cnt="101" then cnt<="

45、;000"else cnt<=cnt+1;end if; end if; end process; process(cnt,cs,ds,sl,sh,ml,mh) begin case cnt is when "000"=>data<=cs;sel<="11101111"when "001"=>data<=ds;sel<="11011111"when "010"=>data<=sl;sel<="01111111&quo

46、t;when "011"=>data<=sh;sel<="11111110"when "100"=>data<=ml;sel<="11111011"when "101"=>data<=mh;sel<="11110111"when others=>null;end case;end process;-led7:to decide the numberprocess(data)begin led7<="0

47、000000" case data is when "0000" => led7<="0000001" when "0001" => led7<="1001111" when "0010" => led7<="0010010" when "0011" => led7<="0000110" when "0100" => led7<="100

48、1100" when "0101" => led7<="0100100" when "0110" => led7<="0100000" when "0111" => led7<="0001111" when "1000" => led7<="0000000" when "1001" => led7<="0000100" when

49、 others => null; end case;end process;end Behavioral;根據(jù)設(shè)計(jì)所做仿真如圖:圖17 顯示控制模塊仿真波形圖 根據(jù)仿真波形,隨著計(jì)數(shù)脈沖個(gè)數(shù)的逐次遞加,38譯碼器將數(shù)據(jù)輸入端選擇出來(lái),實(shí)現(xiàn)對(duì)數(shù)碼管的位選,7段譯碼器對(duì)應(yīng)相應(yīng)的數(shù)字,即段選信號(hào),從而使顯示控制模塊同時(shí)實(shí)現(xiàn)了位選與段選的功能.3.1.6使能模塊使能模塊的主要功能是產(chǎn)生計(jì)數(shù)器的使能控制信號(hào).在輸入信號(hào)的作用下,輸出信號(hào)發(fā)生翻轉(zhuǎn).根據(jù)系統(tǒng)設(shè)計(jì)要求,設(shè)置開(kāi)始計(jì)時(shí)/停止計(jì)時(shí)按鍵,該按鍵每按一次,跑表開(kāi)始或停止計(jì)時(shí),再按一次,停止或開(kāi)始計(jì)時(shí).該模塊的設(shè)計(jì)原理框圖如下所示:圖18 使能原理

50、設(shè)計(jì)框圖其設(shè)計(jì)程序如下所示:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_arith.ALL;use IEEE.STD_LOGIC_unsigned.ALL;entity en is Port ( k : in STD_LOGIC; e : out STD_LOGIC);end en;architecture Behavioral of en issignal e1:STD_LOGIC;begin process(k) begin if rising_edge(k) then e1<=not e1; end if;end process; e<=e1;end Behavioral;根據(jù)設(shè)計(jì)所做仿真如下:圖19 使能模塊仿真圖由仿真圖可見(jiàn),每當(dāng)按鍵一次,在

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(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)論