• 方案介紹
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

電子計(jì)時(shí)時(shí)鐘帶設(shè)計(jì)報(bào)告VHDL代碼Quartus仿真

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

2-24010Z94505I0.doc

共1個(gè)文件

名稱:電子計(jì)時(shí)時(shí)鐘帶設(shè)計(jì)報(bào)告VHDL代碼Quartus仿真

軟件:Quartus

語(yǔ)言:VHDL

代碼功能:

電子計(jì)時(shí)時(shí)鐘帶設(shè)計(jì)報(bào)告

利用VHDL語(yǔ)言,實(shí)現(xiàn)電子計(jì)時(shí)時(shí)鐘,要求能夠顯示分鐘、秒鐘,顯示輸出為共陰極數(shù)碼管,要求:

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

2、用VHDL實(shí)現(xiàn)譯碼顯示邏輯,并闡述設(shè)計(jì)原理,給出關(guān)鍵block diagram設(shè)計(jì)框圖。

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

(1)按設(shè)計(jì)指導(dǎo)書中要求的格式書寫,所有內(nèi)容一律打印;

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

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

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

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

演示視頻:

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

1. 工程文件

2. 程序文件

3. 程序編譯

4. RTL圖

5. 仿真圖

整體仿真圖

60進(jìn)制計(jì)數(shù)器模塊

顯示模塊

 

設(shè)計(jì)報(bào)告.doc

電子計(jì)時(shí)時(shí)鐘設(shè)計(jì)報(bào)告

一、功能要求

利用VHDL語(yǔ)言,實(shí)現(xiàn)電子計(jì)時(shí)時(shí)鐘,要求能夠顯示分鐘、秒鐘,顯示輸出為共陰極數(shù)碼管,要求:

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

2、用VHDL實(shí)現(xiàn)譯碼顯示邏輯,并闡述設(shè)計(jì)原理,給出關(guān)鍵block diagram設(shè)計(jì)框圖。

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

二、設(shè)計(jì)原理

根據(jù)功能要求分析,設(shè)計(jì)電子計(jì)時(shí)時(shí)鐘,要求能夠顯示分鐘、秒鐘,分鐘和秒鐘都是60進(jìn)制,因此可以設(shè)計(jì)一個(gè)60進(jìn)制的計(jì)數(shù)器,然后將該計(jì)數(shù)器調(diào)用2次,將秒鐘對(duì)應(yīng)的60進(jìn)制計(jì)數(shù)器的進(jìn)位輸出控制分鐘計(jì)數(shù),也就是當(dāng)秒鐘計(jì)數(shù)60次后,分鐘計(jì)數(shù)1次。這樣就能實(shí)現(xiàn)分鐘和秒鐘的控制。秒鐘的60進(jìn)制計(jì)數(shù)器控制時(shí)鐘為1Hz,即1秒計(jì)數(shù)一次。要求驅(qū)動(dòng)的數(shù)碼管為共陰極數(shù)碼管,共陰極數(shù)碼管的原理為8個(gè)發(fā)光二極管的陰極連在一起,分8個(gè)端口的控制信號(hào),當(dāng)端口輸入高電平時(shí),對(duì)應(yīng)的二極管點(diǎn)亮,如下圖所示。

三、設(shè)計(jì)過(guò)程

3.1. 60進(jìn)制的計(jì)數(shù)器設(shè)計(jì)

60進(jìn)制計(jì)數(shù)器的輸入端口有時(shí)鐘端口clk,異步清零端口reset、同步置數(shù)信號(hào)set_key,同步置數(shù)十位time_ten[3:0]和同步置數(shù)十位time_one[3:0]以及使能信號(hào)端口enable;輸出端口為十位輸出cnt_ten[3:0],個(gè)位輸出cnt_one[3:0]以及進(jìn)位輸出cout。

下圖為60進(jìn)制計(jì)數(shù)器的原理圖

具體代碼編碼分2部分,一部分為計(jì)數(shù)控制,一部分為進(jìn)位信號(hào)控制。計(jì)數(shù)控制首先判斷reset值若為高電平,則輸出全為0,然后在時(shí)鐘clk的上升沿檢測(cè)同步置數(shù)信號(hào),若為高電平,則進(jìn)行置位,將同步置數(shù)十位time_ten[3:0]和同步置數(shù)十位time_one[3:0]賦值給計(jì)數(shù)器。然后判斷enable,若為高電平則正常計(jì)數(shù),計(jì)數(shù)時(shí)先對(duì)個(gè)位計(jì)數(shù),個(gè)位計(jì)數(shù)到9后,個(gè)位清零,十位加1,若計(jì)數(shù)到59,則十位個(gè)位均回0。

進(jìn)位信號(hào)的控制為判斷此時(shí)十位和個(gè)位是否已經(jīng)計(jì)數(shù)到59,若是,則輸出1,否則輸出0。至此60進(jìn)制計(jì)數(shù)器就設(shè)計(jì)完成了。

3.2 顯示譯碼模塊設(shè)計(jì)

顯示譯碼模塊的輸入信號(hào)為分鐘十位和個(gè)位cnt_ten_minute[3:0]、cnt_one_minute[3:0]以及秒鐘的十位和個(gè)位cnt_ten_second[3:0]、cnt_one_second[3:0]。輸出打端口為4個(gè)數(shù)碼管輸出端口,與輸入一一對(duì)應(yīng),分別為分十位、分個(gè)位、秒十位、秒個(gè)位:HEX_ten_minute[3:0]、HEX_one_minute[3:0]、HEX_ten_second[3:0]、HEX_one_second[3:0]。下圖為顯示譯碼模塊的原理圖。

具體代碼編碼采用case語(yǔ)句,分為4個(gè)進(jìn)程,一個(gè)進(jìn)程對(duì)應(yīng)一個(gè)數(shù)碼管的譯碼,輸入計(jì)數(shù)信號(hào)的值為0~9的范圍,因此需要對(duì)0~9共10個(gè)數(shù)進(jìn)行編碼。根據(jù)下圖,可以分析得到每個(gè)數(shù)字對(duì)應(yīng)的a,b,c,d,e,f,g,dp值。

3.3 頂層電路設(shè)計(jì)

模塊代碼設(shè)計(jì)完成后,在頂層新建原理圖文件,添加2個(gè)60進(jìn)制計(jì)數(shù)器模塊和一個(gè)顯示譯碼模塊,原理圖如下:

圖中,將秒鐘的60進(jìn)制計(jì)數(shù)器的cout信號(hào)作為分鐘的enable信號(hào),使得秒鐘計(jì)數(shù)到59時(shí)可以觸發(fā)分鐘的計(jì)數(shù)器加1。再將秒鐘的計(jì)數(shù)輸出和分鐘的計(jì)數(shù)輸出都連到顯示模塊的輸入,最終得到完成的電路圖。

四、仿真結(jié)果及分析

4.1 計(jì)數(shù)器模塊仿真

60進(jìn)制計(jì)數(shù)器模塊的仿真圖如下所示

上圖中,當(dāng)reset信號(hào)為高電平時(shí),電路異步清零,cnt_ten和cnt_one輸出均為0,reset信號(hào)為低電平時(shí),enable為高電平,開始計(jì)數(shù),當(dāng)檢測(cè)到set_key為高電平時(shí),進(jìn)行同步置數(shù),cnt_ten和cnt_one輸出均為置數(shù)的time_ten和time_one。set_key為低電平時(shí),繼續(xù)從當(dāng)前值進(jìn)行計(jì)數(shù),當(dāng)計(jì)數(shù)到59時(shí)輸出進(jìn)位信號(hào)cout,同時(shí)計(jì)數(shù)器回到0。仿真圖驗(yàn)證了計(jì)數(shù)器的各項(xiàng)功能。

4.2 譯碼模塊仿真

譯碼模塊的仿真圖如下圖所示:

上圖中,HEX_ten_minute[3:0]、HEX_one_minute[3:0]、HEX_ten_second[3:0]、HEX_one_second[3:0]分別表示分十位、分個(gè)位、秒十位、秒個(gè)位。其中HEX_ten_minute對(duì)應(yīng)的譯碼值為01001111(最高位為dp,最低位為a),通過(guò)與數(shù)碼管對(duì)應(yīng)的a,b,c,d,e,f,g,dp值比較,該碼對(duì)應(yīng)的數(shù)字為3,與cnt_ten_minute的值一致,因此分鐘十位譯碼仿真正確,其他為同理,均能驗(yàn)證仿真正確。

4.3 整體仿真

整體功能仿真如下圖所示:

圖中,異步清零和同步置數(shù)功能與60進(jìn)制計(jì)數(shù)器模塊的仿真一致,且可以觀察到秒鐘計(jì)數(shù)到59后,分鐘才加1,且同時(shí)秒鐘回答0重新開始計(jì)數(shù)。下圖為整體仿真圖的局部放大圖,圖中可以清晰看到秒鐘到分鐘的進(jìn)位過(guò)程。

最終的4個(gè)數(shù)碼管顯示信號(hào)為HEX0、HEX1,HEX2,HEX3,其中HEX1為秒鐘個(gè)位,HEX0為秒鐘十位,HEX3為分鐘個(gè)位,HEX2為分鐘十位。

五、總結(jié)

通過(guò)此次實(shí)驗(yàn),我使用QuartusII軟件和VHDL語(yǔ)言,設(shè)計(jì)了電子計(jì)時(shí)時(shí)鐘,且通過(guò)模塊仿真和整體仿真驗(yàn)證了設(shè)計(jì)的正確性,使我對(duì)Quartus軟件的使用更加熟悉,同時(shí)也進(jìn)一步加深了對(duì)VHDL語(yǔ)言的理解。目前我所設(shè)計(jì)的這個(gè)電子時(shí)鐘只是仿真,并沒有時(shí)間在硬件上運(yùn)行,后續(xù)如果改進(jìn)的話可以嘗試使其真正的在開發(fā)板上運(yùn)行。

部分代碼展示:

LIBRARY?ieee;
???USE?ieee.std_logic_1164.all;
???USE?ieee.std_logic_unsigned.all;
--60進(jìn)制計(jì)數(shù)器
ENTITY?counter_60?IS
???PORT?(
??????clk??????:?IN?STD_LOGIC;--時(shí)鐘
??enable???:?IN?STD_LOGIC;--使能
??reset????:?IN?STD_LOGIC;--復(fù)位,異步清零
??????set_key??:?IN?STD_LOGIC;--同步置數(shù)按鍵
??????time_ten?:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--置數(shù)值十位
??????time_one?:?IN?STD_LOGIC_VECTOR(3?DOWNTO?0);--置數(shù)值個(gè)位??
??????cnt_ten??:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0);--計(jì)數(shù)值十位
??????cnt_one??:?OUT?STD_LOGIC_VECTOR(3?DOWNTO?0);--計(jì)數(shù)值個(gè)位
??????cout?????:?OUT?STD_LOGIC--進(jìn)位
???);
END?counter_60;
ARCHITECTURE?behave?OF?counter_60?IS
???SIGNAL?cnt_ten_buf?:?STD_LOGIC_VECTOR(3?DOWNTO?0)?:=?"0000";--計(jì)數(shù)值十位
???SIGNAL?cnt_one_buf?:?STD_LOGIC_VECTOR(3?DOWNTO?0)?:=?"0000";--計(jì)數(shù)值個(gè)位
BEGIN
???PROCESS?(clk,reset)
???BEGIN
IF(reset='1')THEN--異步復(fù)位
cnt_ten_buf?<=?"0000";
????????cnt_one_buf?<=?"0000";
ELSIF?(clk'EVENT?AND?clk?=?'1')?THEN--正常計(jì)時(shí)
IF(set_key='1')THEN--同步置數(shù)
cnt_ten_buf?<=?time_ten;--置數(shù)值十位
cnt_one_buf?<=?time_one;--置數(shù)值個(gè)位??
ELSIF(enable='1')THEN--使能
?IF?(cnt_ten_buf?=?"0101"?AND?cnt_one_buf?=?"1001")?THEN--59后變?yōu)?0
cnt_ten_buf?<=?"0000";
cnt_one_buf?<=?"0000";
?ELSIF?(cnt_one_buf?=?"1001")?THEN--個(gè)位為9,十位加1
cnt_ten_buf?<=?cnt_ten_buf?+?"0001";
cnt_one_buf?<=?"0000";
?ELSE--個(gè)位累加
cnt_ten_buf?<=?cnt_ten_buf;
cnt_one_buf?<=?cnt_one_buf?+?"0001";
?END?IF;
END?IF;
?????END?IF;
???END?PROCESS;
cout<='1'?when?(cnt_ten_buf?=?"0101"?AND?cnt_one_buf?=?"1001")?else?'0';--進(jìn)位
???
???cnt_ten?<=?cnt_ten_buf;--計(jì)數(shù)值十位
???cnt_one?<=?cnt_one_buf;--計(jì)數(shù)值個(gè)位???
END?behave;

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

  • 2-24010Z94505I0.doc
    下載

相關(guān)推薦

方案定制

去合作
方案開發(fā)定制化,2000+方案商即時(shí)響應(yīng)!