• 方案介紹
    • 1、課題任務(wù)及要求
    • 2、設(shè)計(jì)內(nèi)容
    • 3、設(shè)計(jì)及實(shí)現(xiàn)方法
    • 4、調(diào)試及運(yùn)行結(jié)果
    • 5、設(shè)計(jì)總結(jié)
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

任意進(jìn)制8421BCD計(jì)數(shù)譯碼顯示電路VHDL代碼Quartus仿真

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

2-250513192S3205.doc

共1個(gè)文件

名稱:利用VHDL語言,實(shí)現(xiàn)0~8090任意進(jìn)制8421BCD計(jì)數(shù)譯碼顯示電 路,并將計(jì)數(shù)器輸出的8421BCD進(jìn)行共陰數(shù)碼管顯示設(shè)計(jì)VHDL代碼Quartus仿真

軟件:Quartus

語言:VHDL

代碼功能:

1、計(jì)數(shù)器具有同步置數(shù)功能、異步清零功能,用VHDL實(shí)現(xiàn)計(jì)數(shù)邏輯,并闡述設(shè)計(jì)原理,給出關(guān)鍵block diagram設(shè)計(jì)框圖。

2、8421BCD碼7段譯碼部分可以參見74LS48功能,用VHDL實(shí)現(xiàn)譯碼邏輯,并闡述設(shè)計(jì)原理,給出關(guān)鍵 block diagram設(shè)計(jì)框圖。

3、譯碼輸岀后驅(qū)動(dòng)的數(shù)碼管為共陰極數(shù)碼管,闡述電路原理,給出相應(yīng)編碼方式。

報(bào)告要求

(1)按要求的格式書寫,所有內(nèi)容一律打印、封面要求統(tǒng)一

(2)報(bào)告內(nèi)容包括設(shè)計(jì)過程、軟件仿真的結(jié)果及分析

(3)報(bào)告中要有整體電路原理圖、各模塊原理圖;

(4)軟件仿真包括各個(gè)模塊的仿真和整體電路的仿真

FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com

設(shè)計(jì)文檔:

任意進(jìn)制8421BCD計(jì)數(shù)譯碼顯示

1、課題任務(wù)及要求

1.1課題任務(wù)

利用VHDL語言,實(shí)現(xiàn)0~8090任意進(jìn)制8421BCD計(jì)數(shù)譯碼顯示電路,并將計(jì)數(shù)器輸出的8421BCD進(jìn)行共陰極數(shù)碼管顯示。要求:

1. 計(jì)數(shù)器具有同步置數(shù)功能、異步清零功能,利用VHDL實(shí)現(xiàn)計(jì)數(shù)邏輯,并闡述設(shè)計(jì)原理,給出關(guān)鍵block diagram設(shè)計(jì)框圖。

2. 8421BCD碼譯碼部分可以參見74LS48功能,用VHDL實(shí)現(xiàn)譯碼邏輯,并闡述設(shè)計(jì)原理,給出關(guān)鍵block diagram設(shè)計(jì)框圖。

3. 譯碼輸出后驅(qū)動(dòng)的數(shù)碼管為共陰極數(shù)碼管,闡述電路原理,給出響應(yīng)的編碼方式。

1.2課題要求

課題設(shè)計(jì)實(shí)現(xiàn)的功能指標(biāo)為。

●設(shè)計(jì)指標(biāo)一:計(jì)數(shù)器具有同步置數(shù)功能、異步清零功能

●設(shè)計(jì)指標(biāo)二:使用8421BCD計(jì)數(shù)器

●設(shè)計(jì)指標(biāo)三:譯碼輸出后驅(qū)動(dòng)的數(shù)碼管為共陰極數(shù)碼管

2、設(shè)計(jì)內(nèi)容

系統(tǒng)總體設(shè)計(jì)思路為采用分模塊設(shè)計(jì),模塊分為計(jì)數(shù)模塊、數(shù)碼管顯示模塊及頂層模塊,具體模塊功能具體介紹如下。

2.1 設(shè)計(jì)總體功能簡(jiǎn)介

系統(tǒng)總體設(shè)計(jì)思路為采用分模塊設(shè)計(jì),模塊分為計(jì)數(shù)模塊、數(shù)碼管顯示模塊及頂層模塊,采用自頂向下的設(shè)計(jì)思想??傮w功能為實(shí)現(xiàn)0~8090任意進(jìn)制8421BCD計(jì)數(shù)譯碼顯示電路,并將計(jì)數(shù)器輸出的8421BCD進(jìn)行共陰極數(shù)碼管顯示

2.2 頂層模塊功能

頂層模塊實(shí)現(xiàn)將計(jì)數(shù)模塊和顯示模塊連接的功能,頂層模塊如下圖所示

上圖中,bcd_counter為計(jì)數(shù)模塊,display為顯示模塊。頂層輸入端口有:

Clk:時(shí)鐘信號(hào)

Rst_p:系統(tǒng)復(fù)位信號(hào)高電平有效

Load:同步置數(shù)使能信號(hào)

Data_in[15:0]:同步置數(shù)的數(shù)據(jù),采用8421BCD編碼

頂層輸出端口為4個(gè)7段數(shù)碼管信號(hào):

HEX0[6..0]:數(shù)碼管0

HEX1[6..0]:數(shù)碼管1

HEX2[6..0]:數(shù)碼管2

HEX3[6..0]:數(shù)碼管3

2.3 計(jì)數(shù)模塊功能

計(jì)數(shù)模塊如下圖所示:

輸入端口有:

Clk:時(shí)鐘信號(hào)

Rst_p:系統(tǒng)復(fù)位信號(hào),高電平有效

Load:同步置數(shù)使能信號(hào)

Data_in[15:0]:同步置數(shù)的數(shù)據(jù),采用8421BCD編碼

輸出端口為計(jì)數(shù)值:

Data_out[15..0]:計(jì)數(shù)值輸出采用8421BCD編碼

該模塊實(shí)現(xiàn)0~8090任意進(jìn)制8421BCD計(jì)數(shù)器的功能,計(jì)數(shù)器具有同步置數(shù)功能、異步清零功能

2.4 顯示模塊功能

顯示模塊如下圖所示:

 

輸入端口有:

Clk:時(shí)鐘信號(hào)

Data[15:0]:計(jì)數(shù)值,采用8421BCD編碼

輸出端口為4個(gè)7段數(shù)碼管信號(hào):

HEX0[6..0]:數(shù)碼管0

HEX1[6..0]:數(shù)碼管1

HEX2[6..0]:數(shù)碼管2

HEX3[6..0]:數(shù)碼管3

該模塊實(shí)現(xiàn)8421BCD碼譯碼功能,譯碼輸出后驅(qū)動(dòng)的數(shù)碼管為共陰極數(shù)碼管。

3、設(shè)計(jì)及實(shí)現(xiàn)方法

3.1 計(jì)時(shí)模塊設(shè)計(jì)方法

計(jì)時(shí)模塊實(shí)現(xiàn)0~8090任意進(jìn)制8421BCD計(jì)數(shù)器的功能,計(jì)數(shù)器具有同步置數(shù)功能、異步清零功能。主要代碼如下:

上述代碼中,為實(shí)現(xiàn)任意進(jìn)制的功能,定義了一個(gè)信號(hào)MOD_NUM信號(hào),將該值設(shè)置為多少就是多少進(jìn)制。下面process進(jìn)制實(shí)現(xiàn)具體任意進(jìn)制BCD碼計(jì)數(shù)器的功能,定義了一個(gè)BCD編碼的信號(hào)為count。

首先,實(shí)現(xiàn)異步清零的功能,當(dāng)rst信號(hào)為1時(shí),輸出count為0,然后實(shí)現(xiàn)同步置數(shù)功能,當(dāng)load信號(hào)為1時(shí),將輸入的data_in賦值給count。

最后就是實(shí)現(xiàn)BCD碼計(jì)數(shù)器功能,首先判斷是否計(jì)數(shù)到999,若是,則千位加1,否則繼續(xù)判斷是否計(jì)數(shù)到99,若是,則百位加1;否則繼續(xù)判斷是否計(jì)數(shù)到9,若是,則十位加1。否則只需要個(gè)位加1。

Count為BCD編碼,其15~12位表示千位,11~8表示百位,7~4表示十位,3~0表示個(gè)位。

3.2 顯示模塊設(shè)計(jì)方法

顯示模塊實(shí)現(xiàn)8421BCD碼譯碼功能,譯碼輸出后驅(qū)動(dòng)的數(shù)碼管為共陰極數(shù)碼管。其中單個(gè)數(shù)碼管顯示代碼如下:

數(shù)碼管顯示模塊用于控制數(shù)碼管將計(jì)數(shù)值顯示出來。使用7段數(shù)碼管顯示,每個(gè)數(shù)碼管輸入為7位,對(duì)應(yīng)下圖中的abcdefg7段,數(shù)碼管為共陰極,當(dāng)輸入1時(shí)對(duì)應(yīng)的段點(diǎn)亮,當(dāng)輸入為0時(shí),對(duì)應(yīng)的段滅。

根據(jù)上圖可以觀察到,若要顯示數(shù)字0,G滅,ABCDEF亮,如果是共陽極數(shù)碼管也就是對(duì)應(yīng)編碼為“1000000”,共陰極數(shù)碼管則正好相反,故可以寫成not “1000000”,也就是“0111111”,其中從左到右依次對(duì)應(yīng)GFEDCBA。以此類推可以得到0~9的所有編碼。

4、調(diào)試及運(yùn)行結(jié)果

4.1 計(jì)時(shí)模塊調(diào)試及運(yùn)行結(jié)果

對(duì)計(jì)時(shí)模塊進(jìn)行單獨(dú)仿真,仿真圖如下圖所示(為便于觀察,設(shè)置進(jìn)制為34)。

上圖中,rst為異步清零信號(hào),圖中可以看到,當(dāng)rst信號(hào)為1時(shí),輸出data_out立馬清零。圖中l(wèi)oad為置位信號(hào),圖中可以看到,load信號(hào)為高時(shí),輸出data_out為data_in得值。

當(dāng)rst和load信號(hào)均無效時(shí),計(jì)數(shù)器按時(shí)鐘正常計(jì)數(shù),可以看到,當(dāng)計(jì)數(shù)到34后,計(jì)數(shù)器清零,重新開始計(jì)數(shù),故進(jìn)制正確。

4.2 顯示模塊調(diào)試及運(yùn)行結(jié)果

對(duì)顯示模塊進(jìn)行單獨(dú)仿真,仿真圖如下圖所示(為便于觀察,設(shè)置計(jì)數(shù)器計(jì)數(shù)0~9)。

上圖中,計(jì)數(shù)值輸入為0000~0009,其中HEX0顯示個(gè)位,也就是0~9,HEX1~3均顯示0。根據(jù)前面關(guān)于數(shù)碼管的介紹可知,0對(duì)應(yīng)的編碼為0111111,1對(duì)應(yīng)的編碼為0000110,以此類推可以做到仿真圖0~9編碼具正確。

4.3 系統(tǒng)總體調(diào)試及運(yùn)行結(jié)果

對(duì)系統(tǒng)進(jìn)行總體仿真,仿真圖如下圖所示:

上圖可以看到,整體仿真圖的仿真結(jié)果相當(dāng)于將計(jì)數(shù)模塊和顯示模塊進(jìn)行合并顯示,最終輸出為HEX0~3的編碼值??梢钥吹剑?dāng)異步清零時(shí),輸出的編碼值為0000,當(dāng)同步置數(shù)時(shí),輸出的編碼值為0034,其他情況下為遞增計(jì)數(shù)。

5、設(shè)計(jì)總結(jié)

5.1設(shè)計(jì)中的問題、原因分析及解決方法

設(shè)計(jì)中一開始沒有正確理解BCD編碼的含義,導(dǎo)致使用了通常的二進(jìn)制編碼,這種編碼的優(yōu)點(diǎn)是代碼簡(jiǎn)單,計(jì)數(shù)器較容易實(shí)現(xiàn),但是缺點(diǎn)是不能直接按位分離出千位,百位,十位個(gè)位,導(dǎo)致時(shí)數(shù)碼管顯示不正確,后續(xù)改進(jìn)為8421BCD編碼,雖然計(jì)數(shù)器代碼設(shè)計(jì)相對(duì)復(fù)雜一點(diǎn),但是對(duì)于數(shù)碼管顯示部分就可以按位分離出千位,百位,十位和個(gè)位。

5.2設(shè)計(jì)方案的優(yōu)缺點(diǎn)

本設(shè)計(jì)方案的優(yōu)點(diǎn)是結(jié)構(gòu)清晰,采用分模塊設(shè)計(jì)方法,各個(gè)模塊功能比較明確,可以分模塊仿真,易于調(diào)試;缺點(diǎn)的話在于任意進(jìn)制的設(shè)計(jì)在計(jì)數(shù)模塊內(nèi)通過一個(gè)參數(shù)進(jìn)行定義,當(dāng)要修改進(jìn)制時(shí),需要修改該模塊內(nèi)的參數(shù),不是很靈活。

5.3心得體會(huì)

通過這次設(shè)計(jì),我加深了對(duì)VHDL代碼的理解,熟悉了quartus軟件的編碼和仿真操作,并且對(duì)8421BCD碼的作用也有了更深刻的認(rèn)識(shí)。通過這次實(shí)驗(yàn),我對(duì)我使用VHDL和EDA工具有了一定的提高,后續(xù)有其他功能設(shè)計(jì)的話可以更加容易的上手,也鍛煉了自己發(fā)現(xiàn)問題和解決問題的能力,為今后打下堅(jiān)固基礎(chǔ)。

部分代碼展示:

LIBRARY?ieee;
???USE?ieee.std_logic_1164.all;
ENTITY?display?IS
???PORT?(
??????clk???:?IN?STD_LOGIC;
??????data??:?IN?STD_LOGIC_VECTOR(15?DOWNTO?0);
??????HEX0??:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0);
??????HEX1??:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0);
??????HEX2??:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0);
??????HEX3??:?OUT?STD_LOGIC_VECTOR(6?DOWNTO?0)
???);
END?display;
ARCHITECTURE?RTL?OF?display?IS
BEGIN
???
???PROCESS?(clk)
???BEGIN
??????IF?(clk'EVENT?AND?clk?=?'1')?THEN
?????????CASE?data(3?DOWNTO?0)?IS
????????????WHEN?"0000"?=>
???????????????HEX0?
???????????????HEX0?
???????????????HEX0?
???????????????HEX0?
???????????????HEX0?
???????????????HEX0?
???????????????HEX0?
???????????????HEX0?
???????????????HEX0?
???????????????HEX0?
?????????END?CASE;
??????END?IF;
???END?PROCESS;
???
???
???PROCESS?(clk)
???BEGIN
??????IF?(clk'EVENT?AND?clk?=?'1')?THEN
?????????CASE?data(7?DOWNTO?4)?IS
????????????WHEN?"0000"?=>
???????????????HEX1?
???????????????HEX1?
???????????????HEX1?
???????????????HEX1?
???????????????HEX1?
???????????????HEX1?
???????????????HEX1?
???????????????HEX1?
???????????????HEX1?
???????????????HEX1?
?????????END?CASE;
??????END?IF;
???END?PROCESS;
???
???
???PROCESS?(clk)
???BEGIN
??????IF?(clk'EVENT?AND?clk?=?'1')?THEN
?????????CASE?data(11?DOWNTO?8)?IS
????????????WHEN?"0000"?=>
???????????????HEX2?
???????????????HEX2?
???????????????HEX2?
???????????????HEX2?
???????????????HEX2?
???????????????HEX2?
???????????????HEX2?
???????????????HEX2?
???????????????HEX2?
???????????????HEX2?
?????????END?CASE;
??????END?IF;
???END?PROCESS;

點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1518

  • 2-250513192S3205.doc
    下載

相關(guān)推薦