久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

基于vhdl語言的二進制轉十進制并用數碼管顯示的設計(最終定稿)

時間:2019-05-12 23:21:13下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《基于vhdl語言的二進制轉十進制并用數碼管顯示的設計》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《基于vhdl語言的二進制轉十進制并用數碼管顯示的設計》。

第一篇:基于vhdl語言的二進制轉十進制并用數碼管顯示的設計

河南科技學院機電學院 VHDL課程設計報告

題目:八位數碼管顯示

專業班級:電氣工程及其自動化102 姓

名:

周迎接

學 號:

20100344214

指導教師: 付廣春

完成日期:2012年12月 27 日

目 錄 引言…………………………………………………………………………2 2 總體設計方案………………………………………………………………2 2.1 輸入引腳數目的計算……………………………………………………3 2.2 二進制轉為十進制部分程序設計………………………………………3 2.3 數碼管顯示部分程序設計………………………………………………4 3 仿真顯示……………………………………………………………………5 3.1 顯示3仿真圖……………………………………………………………5 3.2顯示96的仿真圖…………………………………………………………5 4 心得體會……………………………………………………………………6 參考文獻………………………………………………………………………6 附錄1…………………………………………………………………………7

摘要

隨著當今社會電子技術的快速發展,單憑借硬件已不再能滿足廣大人民的需求,這時候軟件就顯示除了他們突出的優點。與其他編程語言相比,VHDL語言以其超強的硬件描述能力,良好的可讀性和可移植性,以及其良好的用戶自定義性受到了廣大用戶的青睞。VHDL語言在最近幾年的發展及其迅猛,由此可以看出其用途已經變的越來越廣泛。

一個VHDL程序由5個部分組成,包括實體(ENTITY)、結構體(architecture)、配置(coxnfiguration)、包(package)和庫(library)。實體和結構體兩大部分組成程序設計的最基本單元。圖2.2表示的是一個VHDL 3 程序的基本組成。配置是用來從庫中選擇所需要的單元來組成該系統設計的不同規格的不同版本,VHDL和Verilog HDL已成為IEEE的標準語言,使用IEEE提供的版本。包是存放每個設計模塊都能共享的設計類型、常數和子程序的集合體。庫是用來存放已編譯的實體、結構體、包和配置。在設計中可以使用ASIC芯片制造商提供的庫,也可以使用由用戶生成的IP庫。

今天我所要設計的是基于VHDL語言的8位數碼管顯示電路,其要實現的功能是把輸入的二進制數轉換為對應的十進制數,并通過數碼管顯示出來。其過程大致可以分為通過程序將輸入的二進制數先轉換為對應的十進制數,然后再把對應的十進制數與數碼管的管腳對應起來,使其顯示在數碼管上。關鍵詞:二進制轉為十進制 數碼管顯示 共陽數碼管1 引言

VHDL 的英文全名是 Very-High-Speed Integrated Circuit Hardware Description Language,誕生于

1982 年。1987 年底,VHDL被美國國防部和IEEE確認為標準硬件描述語言。

VHDL主要用于描述數字系統的結構,行為,功能和接口。除了含有許多具有硬件特征的語句外,VHDL的語言形式和描述風格與句法是十分類似于一般的計算機高級語言。VHDL的程序結構特點是將一項工程設計,或稱設計實體(可以是一個元件,一個電路模塊或一個系統)分成外部(或稱可視部分,及端口)和內部(或稱不可視部分),既涉及實體的內部功能和算法完成部分。在對一個設計實體定義了外部界面后,一旦其內部開發完成后,其他的設計就可以直接調用這個實體。這種將設計實體分成內外部分的概念是VHDL系統設計的基本點。

VHDL 語言能夠成為標準化的硬件描述語言并獲得廣泛應用,它自身必然具有很多其他硬件描述語言所不具備的優點。歸納起來,VHDL 語言主要具有以下優點:[1]

(1)VHDL 語言功能強大,設計方式多樣

VHDL 語言具有強大的語言結構,只需采用簡單明確的VHDL語言程序就可以描述十分復雜的硬件電路。同時,它還具有多層次的電路設計描述功能。此外,VHDL 語言能夠同時支持同步電路、異步電路和隨機電路的設計實現,這是其他硬件描述語言所不能比擬的。VHDL 語言設計方法靈活多樣,既支持自頂向下的設計方式,也支持自底向上的設計方法; 既支持模塊化設計方法,也支持層次化設計方法。

(2)VHDL 語言具有強大的硬件描述能力

VHDL 語言具有多層次的電路設計描述功能,既可描述系統級電路,也可以描述門級電路;描述方式既可以采用行為描述、寄存器傳輸描述或者結構描述,也可以采用三者的混合描述方式。同時,VHDL 語言也支持慣性延遲和傳輸延遲,這樣可以準確地建立硬件電路的模型。VHDL 語言的強大描述能力還體現在它具有豐富的數據類型。VHDL 語言既支持標準定義的數據類型,也支持用戶定義的數據類型,這樣便會給硬件描述帶來較大的自由度。

(3)VHDL 語言具有很強的移植能力

VHDL 語言很強的移植能力主要體現在: 對于同一個硬件電路的 VHDL 語言描述,它可以從一個模擬器移植到另一個模擬器上、從一個綜合器移植到另一個綜合器上或者從一個工作平臺移植到另一個工作平臺上去執行。

(4)VHDL 語言的設計描述與器件無關

采用 VHDL 語言描述硬件電路時,設計人員并不需要首先考慮選擇進行設計的器件。這樣做的好處是可以使設計人員集中精力進行電路設計的優化,而不需要考慮其他的問題。當硬件電路的設計描述完成以后,VHDL 語言允許采用多種不同的器件結構來實現。

(5)VHDL 語言程序易于共享和復用

VHDL 語言采用基于庫的設計方法。在設計過程中,設計人員可以建立各種可再次利用的模塊,一個大規模的硬件電路的設計不可能從門級電路開始一步步地進行設計,而是一些模塊的累加。這些模塊可以預先設計或者使用以前設計中的存檔模塊,將這些模塊存放在庫中,就可以在以后的設計中進行復用。

本次我所要設計的基于VHDL語言的八位數碼管顯示將充分體現它的部分優點。總體設計方案

2.1 輸入引腳數目的計算

因為題目要求數碼管要能顯示最大的八位十進制二進制數,所以對應的二進制表示的十進制數首先要大于99999999,即2的所有n次冪之和應該大于99999999,數碼管才能顯示出最大的八位十進制數,所以計算可得n的值最小為27,所以輸入二進制數的引腳應該設為27個,其二進制數輸入引腳圖如圖1所示

圖1 二進制數輸入引腳圖

2.2 二進制轉為十進制部分程序設計 二進制轉為十進制的部分程序如下: architecture one of look is signal ai,bi,ci,ki,ei,fi,gi,hi:integer range 0 to 9;signal di:integer range 0 to 99999999;begin di<=conv_integer(d);2.3 數碼管顯示部分程序設計

2.3.1 程序中數碼管的選擇及顯示的設置

在本設計中按照我的程序硬件所選用的應該為共陰極數碼管,且當某一位數碼管不需要顯示數據時,統一設定其顯示0,例如需要顯示1時,八個數碼管的顯示為00000001。

2.3.2 數碼管顯示部分部分程序如下: …………

variable a,b,c,k,e,f,g,h:integer range 0 to 9;begin a:=di rem 10;7 b:=(di-a)rem 100;c:=(di-a-10*b)rem 1000;k:=(di-a-10*b-c*100)rem 10000;e:=(di-a-10*b-c*100)rem 100000;f:=(di-a-10*b-c*100-1000*e)rem 1000000;g:=(di-a-10*b-c*100-1000*e-10000*f)rem 10000000;h:=(di-a-10*b-c*100-1000*e-10000*f-100000*g)/10000000;ai<=a;bi<=b;ci<=c;ki<=k;ei<=e;fi<=f;gi<=g;hi<=h;end process;process(ai)begin case ai is

when 0=>led7s1(6 downto 0)<=“1000000”;

when 1=>led7s1(6 downto 0)<=“1111001”;

when 2=>led7s1(6 downto 0)<=“0100100”;

when 3=>led7s1(6 downto 0)<=“0110000”;

when 4=>led7s1(6 downto 0)<=“0011001”;8

when 5=>led7s1(6 downto 0)<=“0010010”;

when 6=>led7s1(6 downto 0)<=“0000010”;

when 7=>led7s1(6 downto 0)<=“1111000”;

when 8=>led7s1(6 downto 0)<=“0000000”;

when 9=>led7s1(6 downto 0)<=“0010000”;

when others=>led7s1(6 downto 0)<=“XXXXXXX”;end case;end process;…………

2.3.3 數碼管顯示部分引腳圖

數碼管顯示部分部分引腳圖如圖2 所示

圖 2 數碼管顯示部分部分引腳圖

2.2.4 總體設計程序見附表1 3 仿真顯示

3.1 顯示“000000003”仿真圖

顯示數字“3”的仿真圖如圖3所示,因為根據程序所需數碼管為共陽極數碼管,所以數碼管對應的“e”,“f”段應該為高電平,在本次設計中,即數碼管的第5,6段為高電平,為了便于觀察,仿真的各項周期均取10ns。

圖3 顯示“3”電路 3.2 顯示“96”部分仿真圖,如圖4所示

圖4 顯示“96”仿真圖 心得體會

通過這次的課程設計讓我對VHDL語言以及電路設計的理論有了更加深入的了解,課程設計是培養學生綜合運用所學知識,發現、提出、分析和解決實際問題,鍛煉實踐能力的重要環節,這次課程設計雖然很累,但我學到了不少東西,對軟件的設計過程和方法有了更深入的了解。在課程設計過程中,我學到了很多人生的哲理,懂得怎么樣去制定計劃,怎么樣去實現這個計劃,并掌握了在執行過程中怎么樣去克服心理上的不良情緒,黑夜過去了,我們收獲的是黎明。在本次實踐中,給我印象最為深刻的是在文件刪除程序的編譯過程中,先有我的各個子程序都已經編輯成功,那么這最后的程序就將是我成功的關鍵。

這次課程設計順利完成了,在設計中遇到了很多問題,最后都是經過查閱相關的資料和在同學的幫助下,終于游逆而解。同時,在我學得到很多實用的知識,同時,對給過我幫助的所有同學再次表示忠心的感謝!

參考文獻

【1】黃繼業.EDA技術使用教程[M].北京:科學出版社,2010 【2】王云亮.電力電子技術[M].北京:電子工業出版社,2009 【3】康光華.電子技術基礎[M].北京:高等教育出版社,2006

附錄1 library ieee;12 use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity look is port(d:in std_logic_vector(26 downto 0);clk3:in std_logic;led7s1,led7s2,led7s3,led7s4,led7s5,led7s6,led7s7,led7s8:out std_logic_vector(6 downto 0));end;architecture one of look is signal ai,bi,ci,ki,ei,fi,gi,hi:integer range 0 to 9;signal di:integer range 0 to 99999999;begin di<=conv_integer(d);

process(di)variable a,b,c,k,e,f,g,h:integer range 0 to 9;begin a:=di rem 10;b:=(di-a)rem 100;c:=(di-a-10*b)rem 1000;k:=(di-a-10*b-c*100)rem 10000;e:=(di-a-10*b-c*100-k*1000)rem 100000;f:=(di-a-10*b-c*100-k*1000-10000*e)rem 1000000;g:=(di-a-10*b-c*100-k*1000-10000*e-100000*f)rem 10000000;h:=(di-a-10*b-c*100-k*1000-10000*e-100000*f-1000000*g)/10000000;ai<=a;bi<=b;ci<=c;ki<=k;ei<=e;fi<=f;gi<=g;hi<=h;end process;process(ai)begin case ai is

when 0=>led7s1(6 downto 0)<=“1000000”;

when 1=>led7s1(6 downto 0)<=“1111001”;13

when 2=>led7s1(6 downto 0)<=“0100100”;

when 3=>led7s1(6 downto 0)<=“0110000”;

when 4=>led7s1(6 downto 0)<=“0011001”;

when 5=>led7s1(6 downto 0)<=“0010010”;

when 6=>led7s1(6 downto 0)<=“0000010”;

when 7=>led7s1(6 downto 0)<=“1111000”;

when 8=>led7s1(6 downto 0)<=“0000000”;

when 9=>led7s1(6 downto 0)<=“0010000”;

when others=>led7s1(6 downto 0)<=“XXXXXXX”;end case;end process;process(bi)begin case bi is

when 0=>led7s2(6 downto 0)<=“1000000”;

when 1=>led7s2(6 downto 0)<=“1111001”;

when 2=>led7s2(6 downto 0)<=“0100100”;

when 3=>led7s2(6 downto 0)<=“0110000”;

when 4=>led7s2(6 downto 0)<=“0011001”;

when 5=>led7s2(6 downto 0)<=“0010010”;

when 6=>led7s2(6 downto 0)<=“0000010”;

when 7=>led7s2(6 downto 0)<=“1111000”;

when 8=>led7s2(6 downto 0)<=“0000000”;

when 9=>led7s2(6 downto 0)<=“0010000”;

when others=>led7s2(6 downto 0)<=“XXXXXXX”;end case;end process;process(ci)begin case ci is

when 0=>led7s3(6 downto 0)<=“1000000”;

when 1=>led7s3(6 downto 0)<=“1111001”;

when 2=>led7s3(6 downto 0)<=“0100100”;

when 3=>led7s3(6 downto 0)<=“0110000”;

when 4=>led7s3(6 downto 0)<=“0011001”;

when 5=>led7s3(6 downto 0)<=“0010010”;

when 6=>led7s3(6 downto 0)<=“0000010”;14

when 7=>led7s3(6 downto 0)<=“1111000”;

when 8=>led7s3(6 downto 0)<=“0000000”;

when 9=>led7s3(6 downto 0)<=“0010000”;

when others=>led7s3(6 downto 0)<=“XXXXXXX”;end case;end process;process(ki)begin case ki is

when 0=>led7s4(6 downto 0)<=“1000000”;

when 1=>led7s4(6 downto 0)<=“1111001”;

when 2=>led7s4(6 downto 0)<=“0100100”;

when 3=>led7s4(6 downto 0)<=“0110000”;

when 4=>led7s4(6 downto 0)<=“0011001”;

when 5=>led7s4(6 downto 0)<=“0010010”;

when 6=>led7s4(6 downto 0)<=“0000010”;

when 7=>led7s4(6 downto 0)<=“1111000”;

when 8=>led7s4(6 downto 0)<=“0000000”;

when 9=>led7s4(6 downto 0)<=“0010000”;

when others=>led7s4(6 downto 0)<=“XXXXXXX”;end case;end process;process(ei)begin case ei is

when 0=>led7s5(6 downto 0)<=“1000000”;

when 1=>led7s5(6 downto 0)<=“1111001”;

when 2=>led7s5(6 downto 0)<=“0100100”;

when 3=>led7s5(6 downto 0)<=“0110000”;

when 4=>led7s5(6 downto 0)<=“0011001”;

when 5=>led7s5(6 downto 0)<=“0010010”;

when 6=>led7s5(6 downto 0)<=“0000010”;

when 7=>led7s5(6 downto 0)<=“1111000”;

when 8=>led7s5(6 downto 0)<=“0000000”;

when 9=>led7s5(6 downto 0)<=“0010000”;

when others=>led7s5(6 downto 0)<=“XXXXXXX”;end case;15 end process;process(fi)begin case fi is

when 0=>led7s6(6 downto 0)<=“1000000”;

when 1=>led7s6(6 downto 0)<=“1111001”;

when 2=>led7s6(6 downto 0)<=“0100100”;

when 3=>led7s6(6 downto 0)<=“0110000”;

when 4=>led7s6(6 downto 0)<=“0011001”;

when 5=>led7s6(6 downto 0)<=“0010010”;

when 6=>led7s6(6 downto 0)<=“0000010”;

when 7=>led7s6(6 downto 0)<=“1111000”;

when 8=>led7s6(6 downto 0)<=“0000000”;

when 9=>led7s6(6 downto 0)<=“0010000”;

when others=>led7s6(6 downto 0)<=“XXXXXXX”;end case;end process;process(gi)begin case gi is

when 0=>led7s7(6 downto 0)<=“1000000”;

when 1=>led7s7(6 downto 0)<=“1111001”;

when 2=>led7s7(6 downto 0)<=“0100100”;

when 3=>led7s7(6 downto 0)<=“0110000”;

when 4=>led7s7(6 downto 0)<=“0011001”;

when 5=>led7s7(6 downto 0)<=“0010010”;

when 6=>led7s7(6 downto 0)<=“0000010”;

when 7=>led7s7(6 downto 0)<=“1111000”;

when 8=>led7s7(6 downto 0)<=“0000000”;

when 9=>led7s7(6 downto 0)<=“0010000”;

when others=>led7s7(6 downto 0)<=“XXXXXXX”;end case;end process;process(hi)begin case hi is

when 0=>led7s8(6 downto 0)<=“1000000”;16

when 1=>led7s8(6 downto 0)<=“1111001”;

when 2=>led7s8(6 downto 0)<=“0100100”;

when 3=>led7s8(6 downto 0)<=“0110000”;

when 4=>led7s8(6 downto 0)<=“0011001”;

when 5=>led7s8(6 downto 0)<=“0010010”;

when 6=>led7s8(6 downto 0)<=“0000010”;

when 7=>led7s8(6 downto 0)<=“1111000”;

when 8=>led7s8(6 downto 0)<=“0000000”;

when 9=>led7s8(6 downto 0)<=“0010000”;

when others=>led7s8(6 downto 0)<=“XXXXXXX”;end case;end process;end;

第二篇:二進制轉十進制(共)

二進制數轉換成十進制數

二進制的1101轉化成十進制

1101(2)=1*2^0+0*2^1+1*2^2+1*2^3=1+0+4+8=13 轉化成十進制要從右到左用二進制的每個數去乘以2的相應次方 不過次方要從0開始

相反 用十進制的數除以2 每除一下將余數就記在旁邊

最后按余數從下向上排列就可得到1101或者用下面這種方法:

13=8+4+0+1=8+4+1(算出等于13就行了)

由二進制數轉換成十進制數的基本做法是,把二進制數首先寫成加權系數展開式,然后按十進制加法規則求和。這種做法稱為“按權相加”法。

本人有個更直接的方法,例如二進制數1000110轉成十進制數可以看作這樣:

數字中共有三個1 即第二位一個,第三位一個,第七位一個,然后十進制數即2的2-1次方+2的3-1次方+2的7-1次方即2+4+64=70 次方數即1的位數減一。如此計算只需要牢記2的前十次方即可在此本人為大家陳述一下:2的0次方是1

2的1次方是2

2的2次方是4

***222的的的的的的的的的的的的的的的的的的3次方是8 4次方是16 5次方是32 6次方是64 7次方是128 8次方是256 9次方是512 10次方是1024 11次方是2048 12次方是4096 ***81920次方是次方是次方是次方是次方是次方是次方是次方是8192 16384 32768 65536 131072 262144 524288 1048576

在這里僅為您提供前20次方,若需要更多請自己查詢。編輯本段十進制數轉換為二進制數

十進制數轉換為二進制數時,由于整數和小數的轉換方法不同,所以先將十進制數的整數部分和小數部分分別轉換后,再加以合并。1.十進制整數轉換為二進制整數

十進制整數轉換為二進制整數采用“除2取余,逆序排列”法。具體做法是:用2去除十進制整數,可以得到一個商和余數;再用2去除商,又會得到一個商和余數,如此進行,直到商為0時為止,然后把先得到的余數作為二進制數的低位有效位,后得到的余數作為二進制數的高位有效位,依次排列起來。

十進制整數轉二進制

如:255=(11111111)B

255/2=127=====余1

127/2=63======余1

63/2=31=======余1

31/2=15=======余1

15/2=7========余1

7/2=3=========余1 3/2=1=========余1 1/2=0=========余1 789=1100010101 789/2=394.5 =1 第10位 394/2=197 =0 第9位 197/2=98.5 =1 第8位 98/2=49 =0 第7位 49/2=24.5 =1 第6位 24/2=12 =0 第5位 12/2=6 =0 第4位 6/2=3 =0 第3位 3/2=1.5 =1 第2位 1/2=0.5 =1 第1位

2.十進制小數轉換為二進制小數

十進制小數轉換成二進制小數采用“乘2取整,順序排列”法。具體做法是:用2乘十進制小數,可以得到積,將積的整數部分取出,再用2乘余下的小數部分,又得到一個積,再將積的整數部分取出,如此進行,直到積中的小數部分為零,此時0或1為二進制的最后一位。或者達到所要求的精度為止。

然后把取出的整數部分按順序排列起來,先取的整數作為二進制小數的高位有效位,后取的整數作為低位有效位。

十進制小數轉二進制

如:0.625=(0.101)B

0.625*2=1.25======取出整數部分1

0.25*2=0.5========取出整數部分0

0.5*2=1==========取出整數部分1

再如:0.7=(0.1 0110 0110...)B

0.7*2=1.4========取出整數部分1 0.4*2=0.8========取出整數部分0 0.8*2=1.6========取出整數部分1 0.6*2=1.2========取出整數部分1 0.2*2=0.4========取出整數部分0 0.4*2=0.8========取出整數部分0 0.8*2=1.6========取出整數部分1 0.6*2=1.2========取出整數部分1 0.2*2=0.4========取出整數部分0

1、二進制數、八進制數、十六進制數轉十進制數

有一個公式:二進制數、八進制數、十六進制數的各位數字分別乖以各自的基數的(N-1)次方,其和相加之和便是相應的十進制數。個位,N=1;十位,N=2...舉例:

110B=1*2的2次方+1*2的1次方+0*2的0次方=0+4+2+0=6D 110Q=1*8的2次方+1*8的1次方+0*8的0次方=64+8+0=72D

110H=1*16的2次方+1*16的1次方+0*16的0次方=256+16+0=272D

2、十進制數轉二進制數、八進制數、十六進制數

方法是相同的,即整數部分用除基取余的算法,小數部分用乘基取整的方法,然后將整數與小數部分拼接成一個數作為轉換的最后結果。

例:見四級指導16頁。

3、二進制數轉換成其它數據類型

3-1二進制轉八進制:從小數點位置開始,整數部分向左,小數部分向右,每三位二進制為一組用一位八進制的數字來表示,不足三位的用0補足,就是一個相應八進制數的表示。

010110.001100B=26.14Q 八進制轉二進制反之則可。

3-2二進制轉十進制:見1

3-3二進制轉十六進制:從小數點位置開始,整數部分向左,小數部分向右,每四位二進制為一組用一位十六進制的數字來表示,不足四位的用0補足,就是一個相應十六進制數的表示。

00100110.00010100B=26.14H 十進制轉各進制

要將十進制轉為各進制的方式,只需除以各進制的權值,取得其余數,第一次的余數當個位數,第二次余數當十位數,其余依此類推,直到被除數小于權值,最后的被除數當最高位數。

一、十進制轉二進制

如:55轉為二進制

2|55

27――1 個位

13――1 第二位

6――1 第三位

3――0 第四位

1――1 第五位

最后被除數1為第七位,即得110111 二、十進制轉八進制

如:5621轉為八進制

8|5621

702 ―― 5 第一位(個位)

―― 6 第二位―― 7 第三位―― 2 第四位

最后得八進制數:127658 三、十進制數十六進制

如:76521轉為十六進制

16|76521

4726 ――5 第一位(個位)

295 ――6 第二位――6 第三位―― 2 第四位

最后得1276516

二進制與十六進制的關系

2進制 0000 0001 0010 0011 0100 0101 0110 0111 16進制 0 1 2 3 4 5 6 7

2進制 1000 1001 1010 1011 1100 1101 1110 1111 16進制 8 9 a(10)b(11)c(12)d(13)e(14)f(15)

可以用四位數的二進制數來代表一個16進制,如3A16 轉為二進制為:

3為0011,A 為1010,合并起來為00111010。可以將最左邊的0去掉得1110102 右要將二進制轉為16進制,只需將二進制的位數由右向左每四位一個單位分隔,將各單位對照出16進制的值即可。

二進制與八進制間的關系

二進制 000 001 010 011 100 101 110 111 八進制 0 1 2 3 4 5 6 7

二進制與八進制的關系類似于二進制與十六進制的關系,以八進制的各數為0到7,以三位二進制數來表示。如要將51028 轉為二進制,5為101,1為001,0為000,2為010,將這些數的二進制合并后為1010010000102,即是二進制的值。

若要將二進制轉為八進制,將二進制的位數由右向左每三位一個單位分隔,將事單位對照出八進制的值即可。

第三篇:數字電路課程設計——用VHDL語言設計交通燈

數字電路課程設計報告

院系: 電氣信息工程學院 班級: 08測控2班 學號: 08314237 姓名: 董 亮 合作: 虞 波 指導教師: 翟 麗 芳

2010年12月10日

引言······················································2 一 設計任務和設計要求·········································2 二 電路工作原理及方案設計································3 三 軟件設計與調試········································4 1.分頻模塊的設計及仿真圖·································4 2.控制器設計及仿真圖····································6 3.計數器的設計及仿真圖···································7 4.分位模塊的設計·······································9 5.數碼管驅動設計·······································10 6. 頂層文件設置·········································14

四 硬件焊接與組裝調試···································15 五 心得體會·············································16 六 參考文獻·············································16

交通燈控制電路設計

引言:

隨著社會的發展以及人類生活水平的提高,基于CPLD的EDA技術的發展和應用領域的擴大與深入,EDA技術在電子信息、通信、自動控制用計算機等領域的重要性日益突出。

如今,交通的問題日益突出,單單依靠人力來指揮交通已經不可行了,所以,設計交通燈來完成這個需求就顯的越加迫切了。為了確保十字路口的行人和車輛順利、暢通地通過,往往采用電子控制的交通信號來進行指揮。以下就是運用數字電子設計出的交通燈。

本程序設計的是交通燈的設計。采用EDA作為開發工具,VHDL語言為硬件描述語言,quartusII作為程序運行平臺,所開發的程序通過調試運行、波形仿真驗證,實現設計目標。

一.設計任務與設計要求

1. 設計任務

設計一個基于FPGA的十字路口交通控制器,假設南北方向和東西方向,兩個方向分別設置紅燈、綠燈、黃燈三盞燈,設置一組倒計時顯示器,用以指揮車輛和行人有序的通行。紅燈亮表示直行車輛禁行;綠燈亮表示直行車輛可以通行;黃燈亮表示直行車輛即將禁行;倒計時顯示器用來顯示允許通行或禁止通行的時間。盡量采用層次化設計。2. 設計要求

在十字路口南北和東西兩個方向各設一組紅燈、黃燈、綠燈。設一組倒計時顯示器。

自動控制:

設置一組數碼管,以倒計時的方式顯示允許通行或禁止通行的時間,南北方向為主干道,紅燈、黃燈和綠燈顯示時間分別是55、5s、50s。東西方向為次干道,紅燈、黃燈綠燈顯示時間分別為35s、5s、30s。

特殊功能:

(1)緊急狀態時,手動撥動緊急開關,主干道以及次干道都顯示紅燈,禁止通行,并由蜂鳴其報警。

(2)黃燈顯示信號為脈沖信號,使得黃燈為“一閃一閃”的顯示狀態。

二.電路工作原理及方案設計

圖1總體設計框圖

在VHDL設計描述中,采用自頂向下的設計思路,首先要描述頂層的接口,上面的描述已經規定了交通燈控制的輸入輸出信號:輸入信號:外部時鐘信號clk。LED在自頂向下的VHDL設計描述中,通常把整個設計的系統劃分為幾個模塊,然后采用結構描述方式對整個系統進行描述。通過上面的分析,不難得知可以把交通燈控制系統劃分為4個模塊:時鐘分頻模塊,計數模塊,控制模塊,分位譯碼模塊。

分頻電路:輸入較高頻率脈沖用分頻電路的到較

(HOLD=‘1’)發生是,計數器暫停計數。

分位譯碼電路:因為控制器輸出的倒計時數值可能是1位或者2位十進制數,所以在七段數碼管的譯碼電路前要加上分位電路(即將其分為2個1位的十進制數)。七段數碼管的譯碼電路根據控制電路的控制信號,驅動交通燈的顯示,通過輸入二進制數值,輸出信號點亮二極管,我們用的是共陰極數碼管,因此譯碼電路輸出邏輯數值‘1’點亮二極管,譯碼電路輸出邏輯數值‘0’熄滅二極管。

三.軟件設計與調試

圖2模塊化設計原理圖

1.分頻模塊的設計及仿真圖

分頻器1實現的是將高頻時鐘信號轉換成底頻的時鐘信號,用于觸發控制器、計數器和掃描顯示電路。該分頻器實現的是1000分頻,將50M赫茲的時鐘信號分頻成50000赫茲的時鐘信號。LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY FreDevider IS PORT(Clkin:IN Std_Logic;Clkout:OUT Std_Logic);

END;ARCHITECTURE Devider OF FreDevider IS CONSTANT N:Integer:=499;Signal counter:Integer range 0 to N;signal Clk:Std_Logic;BEGIN PROCESS(Clkin)begin IF rising_edge(Clkin)THEN IF Counter=N then counter<=0;Clk<=not clk;else counter<=counter+1;end if;end if;end process;clkout<=clk;end;分頻器2實現的是50000分頻,將50000赫茲的時鐘信號分頻成1赫茲的時鐘信號。

LIBRARY IEEE;USE IEEE.Std_Logic_1164.ALL;ENTITY FreDevider1 IS PORT(Clkin:IN Std_Logic;Clkout:OUT Std_Logic);END;ARCHITECTURE Devider1 OF FreDevider1 IS CONSTANT N:Integer:=24999;signal counter:Integer range 0 to N;signal Clk:Std_Logic;BEGIN PROCESS(Clkin)begin IF rising_edge(Clkin)THEN IF Counter=N then counter<=0;Clk<=not clk;else counter<=counter+1;end if;end if;end process;

clkout<=clk;end;

2.控制器設計及仿真圖

控制器的作用是根據計數器的計數值控制發光二極管的亮、滅,以及輸出倒計時數值給七段譯管的分譯碼電路。此外,當檢測到特殊情況(Hold=‘1’)發生時,無條件點亮紅色的發光二極管。功能:控制發光二極管的亮、滅,以及輸出倒計時數值給七段譯碼管的分位譯碼電路。

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY countroller IS PORT(Clock:IN STD_LOGIC;Hold:in std_logic;CountNum:in INTEGER RANGE 0 TO 89;NumA:out INTEGER RANGE 0 TO 90;RedA,GreenA,YellowA:out std_logic;RedB,GreenB,YellowB:out std_logic);END;ARCHITECTURE behavior OF Countroller IS BEGIN process(Clock)BEGIN IF falling_edge(Clock)THEN IF Hold='1' THEN RedA<='1';RedB<='1';GreenA<='0';GreenA<='0';YellowA<='0';YellowB<='0';

ELSIF CountNum<=54 THEN NumA<=55-CountNum;RedA<='0';GreenA<='1';YellowA<='0';ELSIF CountNum<=59 THEN NumA<=60;RedA<='0';GreenA<='0';YellowA<='1';ELSE NumA<=90-CountNum;RedA<='1';GreenA<='0';YellowA<='0';END IF;IF CountNum<=54 THEN RedB<='1';GreenB<='0';YellowB<='0';ELSIF CountNum<=84 THEN RedB<='0';GreenB<='1';YellowB<='0';ELSe RedB<='0';GreenB<='0';YellowB<='1';END IF;end if;END PROCESS;END;3.計數器的設計及仿真圖

這里計數器的計數范圍為0—90S,下一個時鐘沿回復到0,開始下一輪計數.此外,當檢測到特殊情況(Hold=‘1‘)發生時,計數器暫停計數。

程序如下: LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY counter IS PORT(clock:IN STD_LOGIC;Hold:in std_logic;countNum:BuFFeR INTEGER RANGE 0 TO 90);

END;ARCHITECTURE behavior OF counter IS BEGIN Process(Clock)BEGIN IF rising_edge(Clock)THEN IF Hold='1' then countNum<=countNum;ELSE IF countNum=90 THEN countNum<=0;ELSE countNum<=countNum+1;END IF;END IF;END PROCESS;END;

4.分位模塊的設計

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Fenwei IS PORT(Numin:IN integer RANGE 0 TO 90;NumA,NumB:OUT Integer RANGE 0 to 9);END;ARCHITECTURE behavior OF Fenwei IS BEGIN process(Numin)BEGIN IF Numin>=60 THEN NumA<=10;NumB<=10;elsIF Numin>=50 THEN NumA<=5;NumB<=Numin-50;elsIF Numin>=40 THEN NumA<=4;NumB<=Numin-40;ELSIF Numin>=30 THEN NumA<=3;NumB<=Numin-30;ELSIF Numin>=20 THEN NumA<=2;NumB<=Numin-20;ELSIF Numin>=10 THEN

NumA<=1;NumB<=Numin-10;ELSE NumA<=0;NumB<=Numin;END IF;END PROCESS;END;

5.數碼管驅動設計 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY bcd_data IS PORT(bcd_data:in STD_LOGIC_VECTOR(3 downto 0);segout: out STD_LOGIC_VECTOR(6 downto 0));END;ARCHITECTURE behavior OF bcd_data IS BEGIN process(bcd_data)BEGIN case bcd_data is when “0000”=>segout<=“1111110”;when “0001”=>segout<=“0110000”;when “0010”=>segout<=“1101101”;when “0011” =>segout<=“1111001”;when “0100” =>segout<=“0110011”;when “0101”=>segout<=“1011011”;when “0110”=>segout<=“0011111”;when “0111”=>segout<=“1110000”;when “1000” =>segout<=“1111111”;when “1001” =>segout<=“1110011”;when “1010”=>segout<=“0000000”;when others =>null;END CASE;END PROCESS;END;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;

ENTITY dtsm IS PORT(clk:in STD_LOGIC;NumA,NumB,NumC,NumD: in STD_LOGIC_VECTOR(3 downto 0);segout1:out STD_LOGIC_VECTOR(6 downto 0);led_sel: out STD_LOGIC_VECTOR(3 downto 0));END dtsm;architecture bhv of dtsm is component bcd_data is port(bcd_data:in STD_LOGIC_VECTOR(3 downto 0);segout:out STD_LOGIC_VECTOR(6 downto 0));end component;signal x:STD_LOGIC_VECTOR(3 downto 0);signal q:STD_LOGIC_VECTOR(1 downto 0);begin p1:process(clk)begin if clk'event and clk ='1' then Q<= Q + '1';end if;end process;

p2:process(Q)begin case Q is when“00”=>led_sel<=“1110”;x<=NumD;when“01”=>led_sel<=“1101”;x<=NumC;when“10”=>led_sel<=“1011”;x<=NumB;when“11”=>led_sel<=“0111”;x<=NumA;when others=>null;end case;end process;u1:bcd_data PORT map(bcd_data=>x,segout=>segout1);end;

6.頂層文件設置

library ieee;use ieee.std_logic_1164.all;entity jiaotongdeng is port(clk1:in std_logic;reset1:in std_logic;

hold1:in std_logic;segout2:out std_logic_vector(6 downto 0);led_sel1:out std_logic_vector(3 downto 0);reda1,yellowa1,greena1:out std_logic;redb1,yellowb1,greenb1:out std_logic);end jiaotongdeng;

architecture aa11 of jiaotongdeng is component FreDevider PORT(Clkin:IN Std_Logic;Clkout:OUT Std_Logic);END component;

component FreDevider1 PORT(Clkin:IN Std_Logic;Clkout:OUT Std_Logic);END component;component countroller PORT(Clock:IN STD_LOGIC;Hold:in std_logic;CountNum:in INTEGER RANGE 0 TO 89;NumA:out INTEGER RANGE 0 TO 90;RedA,GreenA,YellowA:out std_logic;RedB,GreenB,YellowB:out std_logic);END component;component counter PORT(clock:IN STD_LOGIC;reset:in std_logic;Hold:in std_logic;countNum:BuFFeR INTEGER RANGE 0 TO 90);END component;component Fenwei PORT(Numin:IN integer RANGE 0 TO 90;NumA,NumB:OUT Integer RANGE 0 to 9);END component;component dtsm PORT(clk:in STD_LOGIC;NumA,NumB: in Integer RANGE 0 to 9;segout1:out STD_LOGIC_VECTOR(6 downto 0);led_sel: out STD_LOGIC_VECTOR(3 downto 0));

END component;signal a,b:std_logic;signal c:INTEGER RANGE 0 TO 89;signal d:INTEGER RANGE 0 TO 90;signal e,f:Integer RANGE 0 to 9;begin u1: FreDevider port map(clkin=>clk1,clkout=>a);u2: FreDevider1 port map(clkin=>a,clkout=>b);u3:counter

port map(clock=>b,reset=>reset1,hold=>hold1,countnum=>c);u4:countroller port map(clock=>b,hold=>hold1,countnum=>c,numa=>d,reda=>reda1,greena=>greena1,yellowa=>yellowa1,redb=>redb1,greenb=>greenb1,yellowb=>yellowb1);u5:fenwei port map(numin=>d,numa=>e,numb=>f);u6:dtsm

port map(clk=>clk1,numa=>e,numb=>f,segout1=>segout2,led_sel=>led_sel1);end aa11;

四.硬件焊接與組裝調試

按照如下圖所示的電路圖,在通用電路焊接板上合理布置各個元器件,進行焊接布線。

圖3硬件焊接電路圖

安裝焊接完成后,仔細檢查電路,是否有誤。若與電路圖不符,應及時排除錯誤。一切就緒后,將與FPGA對應的引腳使用杜邦線連接,連接完畢后,檢查電源極性,避免反接。確認無誤后,接通電源,觀察實驗結果。

首先我們完成的基本的功能,只是簡單的倒計時顯示,然后我們可以進一步修改我們的VHDL語言程序,重新燒入FPGA,以完善我們的設計。

五.心得體會

通過幾天的課程設計,我對EDA技術、VHDL等系列知識都有了一定的了解。使用EDA技術開發頁面的能力也有了很大提高。

EDA設計我們感覺程序調試最重要,試驗軟件、硬件熟悉其次。直到沒有錯誤。若與理想的不同,再查看程序,有無原理上的編輯錯誤或沒有查出的輸入錯誤。都通過可以進行管腳配對,把程序燒入芯片,在實物上看結果,從顯示中得出還需改正的地方,再去改程序。必須注意每改一次都要編譯,重新燒入。我們采用模塊化編程,模塊化接線,再編譯總原理圖,思路比較清楚。有的模塊可以供其它任務通用。

課程設計對學生而言是其對所學課程內容掌握情況的一次自我驗證,從而有著極其重要的意義。通過課程設計能提高學生對所學知識的綜合應用能力,能全面檢查并掌握所學內容,在這學期的課程設計中,在收獲知識的同時,還收獲了閱歷,收獲了成熟,在此過程中,我們通過查找資料,請教老師,以及不懈的努力,不僅培養了獨立思考、動手操作的能力,在各種其它能力上也都有了提高。更重要的是,我們學會了很多學習的方法。而這是日后最實用的,真的是受益匪淺。要面對社會的挑戰,只有不斷的學習、實踐,再學習、再實踐。

另外,我還學到了一個人的力量畢竟有限,但是團隊的力量勢不可擋,我們不能局限,要學會合作。這次課程設計雖然結束了,相信以后我們會以更加積極的態度對待我們的學習、對待我們的生活。我們的激情永遠不會結束,相反,我們會更加努力,努力的去彌補自己的缺點,發展自己的優點,去充實自己,只有在了解了自己的長短之后,我們會更加珍惜擁有的,更加努力的去完善它。

六.參考文獻

(1)潘松,黃繼業.《EDA

技術使用教程》.科學出版社.2006.(2)潘松,黃繼業.《EDA技術與VHDL(

下載基于vhdl語言的二進制轉十進制并用數碼管顯示的設計(最終定稿)word格式文檔
下載基于vhdl語言的二進制轉十進制并用數碼管顯示的設計(最終定稿).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    主站蜘蛛池模板: 亚洲国内精品av五月天| 被窝影院午夜无码国产| 在线播放无码后入内射少妇| 色噜噜亚洲精品中文字幕| 五月丁香六月狠狠爱综合| 国产精品免费看久久久| 双乳被老汉揉搓a毛片免费观看| 亚洲成a人片在线观看天堂无码不卡| 99精品视频在线观看| 日本黄网站三级三级三级| 国产成人一区二区不卡免费视频| 一区二区亚洲精品国产精华液| 蜜臀av在线无码国产| 把插八插露脸对白内射| 粗大猛烈进出高潮视频| 亚洲成av人在线播放无码| 久久aⅴ免费观看| 人人妻人人澡人人爽人人精品电影| 免费无码又爽又刺激高潮的动漫| 亚洲精品无码高潮喷水a片软| 少妇人妻真实偷人精品视频| 亚洲精品乱码日本按摩久久久久| 人妻无码中文久久久久专区| 中文av岛国无码免费播放| 亚洲真人无码永久在线| 黑人30厘米少妇高潮全部进入| 超碰色偷偷男人的天堂| 日韩精品无码综合福利网| 中文字幕在线不卡精品视频99| 欧美日韩精品无码一本二本三本色| 一区二区传媒有限公司| 亚洲色大18成人网站www在线播放| 少妇性荡欲午夜性开放视频剧场| 性动态图av无码专区| 亚洲国产初高中女| 伊人久久精品无码二区麻豆| 精品国产午夜肉伦伦影院| 男人和女人做爽爽免费视频| 久久久久久久综合色一本| 亚洲免费人成视频观看| 真人与拘做受免费视频一|