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

基于FPGA的交通紅綠燈控制器

時間:2019-05-12 00:03:49下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《基于FPGA的交通紅綠燈控制器》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《基于FPGA的交通紅綠燈控制器》。

第一篇:基于FPGA的交通紅綠燈控制器

基于FPGA的交通紅綠燈控制器

姓名:

學號:

專業:

班級:

目錄

1.設計思路...................................................3 1.1設計思想..............................................3 1.2 系統功能與要求.......................................1 1.3總體設計.............................錯誤!未定義書簽。2.主要模塊設計程序...........................................4 2.1主控制模塊............................................4 2.2主程序................................................5 2.3定時計數器模塊

3.所實現功能說明...........................錯誤!未定義書簽。

3.1實現功能.............................................14 3.2仿真波形.............................................14 4.所設計原理圖及故障分析...................錯誤!未定義書簽。5.心得體會..................................錯誤!未定義書簽。參考文獻....................................................18 附錄1 元件清單.............................錯誤!未定義書簽。附錄2 管腳.................................................20

1.設計思路

1.1設計思想

交通燈是城市交通監管系統的重要組成部分,對于保證機動車輛的安全運行,維持城市道路的順暢起到了重要作用。目前很多城市交叉路口的交通燈實行的是定時控制,燈亮的時間是預先設定好的,在時間和空間方面的應變性能較差,一定程度上造成了交通資源的浪費,加重了道路交通壓力。本文利用FPGA的相關知識設計了交通燈控制系統,可以根據實際情況,交通擁堵時由交通警察人工控制某方向上的放行時間,以便按照交通負荷疏導阻塞車輛。整個設計系統通過Max+PlusⅡ軟件進行了模擬仿真,并下載到FPGA器件中進行硬件的調試,驗證了設計的交通信號燈控制電路完全可以實現預定的功能,具有一定的實用性。

1.2 系統功能與要求

交通紅綠燈控制器,假定十字交叉路口的兩個方向各有一組紅,黃,綠三個燈組成的交通燈設計一個可以由交通警察人工控制的紅綠燈控制器,要求:(1)正常時,交通放行十字交叉路口的橫縱兩個方向,放行時間相等;(2)交通堵塞時,由交通警察人工控制某個方向的放行時間,以便按照交通負荷疏導阻塞車輛;

(3)在正常運行狀態下,兩組交通燈按以下規律自動進行轉換,在不同時刻分別放行不同方向的車輛:

(綠,紅)2s→(綠,黃紅)0.5s→(黃,紅)2s→(黃紅,紅)2s→(紅,黃)1s→(紅,綠)5s→(紅,黃綠)0.5s→(紅,黃)2s→(紅,黃綠)2s→(黃,紅)1s→(綠,紅)3s(括號內以逗號分割的分別為橫,縱兩方向點亮的交通燈,橫向紅綠黃燈分別用LEDR0,LEDG0,LEDG1,表示,縱向紅綠黃分別用LEDR4,LEDG4,LEDG5表示)

(4)人工控制放行的方法是,在欲放行某個方向時按下該方向的“放行”按鈕(控制)橫向使用KEY0控制縱方向使用KEY1),則紅綠燈自動將相應方向的道路方向,此后不會放行另一方向的道路,這時候若只按一次“恢復到正常狀態”(KEY3),則整個系統恢復到正常運行狀態。

(5)可使用VERLOG HDL語言和原理圖來設計系統并對系統進行仿真和下載驗證。

圖1 十字路口示意圖

1.3 總體設計

交通燈控制器系統框圖如下圖所示所示,包括置數模塊,計數模塊,和主控制器模塊。置數模塊將交通燈的點亮時間預置到置數電路中,計數模塊以秒為單位倒計時,當計數值減為零時,主控電路改為輸出狀態,電路進入下一個狀態的倒計時。為了簡化設計和結構清晰,將置數模塊,計數模塊視為整個電路的數據通道,與主控制器模塊構成了“數據通道+控制器”的系統結構。因為將定時計數器劃歸到了數據通道,使得控制器的狀態數大大減少,主控制部分可以按照有限狀態機設計。

2.主要模塊設計程序

2.1 主控制模塊

交通燈控制原理圖:

根據對設計要求的分析,主控單元的輸入信號有:(1)時鐘信號;

(2)復位清零信號reset(reset=1表示系統復位恢復到正常狀態);

(3)按鍵信號KEY(由KEY0,KEY1,KEY3組成,KEY0=1表示橫向方向放行車輛,橫向亮綠燈,縱向亮紅燈;KEY1=1,表示縱向方向放行車輛,縱向亮綠燈,橫向亮紅燈;KEY3=1表示恢復到正常狀態);(4)定時計

器的輸

sensor

(由sensor1,sensor2,sensor3,sensor4,sensor5組成,該信號為高電平時,分別表示2s,0.5s,1s,5s,3s的計時完成)。輸出信號有:

(1)橫向交通燈控制信號(LEDR0,LEDG0,LEDG1);(2)縱向交通燈控制信號(LEDR4,LEDG4,LEDG5);(3)控制狀態信號:state(輸出到定時計數器,分別表示2s,0.5s,1s,5s,3s計時)。

主控單元的狀態轉移圖:

主控制模塊程序:

module traffic_control(clock,reset,KEY,sensor,LEDR0,LEDG0,LEDG1,LEDR4,LEDG4,LEDG5);input clock,reset,KEY,sensor;

output LEDR0,LEDG0,LEDG1,LEDR4,LEDG4,LEDG5;parameter st0=0,st1=1,st2=2,st3=3,st4=4,st5=5,st6=6,st7=7,st8=8,st9=9,st10=10,st11=11;reg[2:0] state,nxstate;reg LEDR0,LEDG0,LEDG1,LEDR4,LEDG4,LEDG5;always @(posedge clock)begin if(!reset)state=st1;else state=nxstate;end always @(state or KEY or sensor)begin case(state)st1:begin if(KEY0)begin nxstate=st1;LEDR0=1'b0;LEDG0=1'b1;LEDG1=1'b0;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;end else if(KEY1)begin LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b0;LEDG4=1'b1;LEDG5=1'b0;nxstate=st6;end else if(KEY3)LEDR0=1'b0;LEDG0=1'b;LEDG1=1'b0;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;nxstate=st1;else if(sensor1)begin LEDR0=1'b0;LEDG0=1'b1;LEDG1=1'b1;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;nxstate=st2;end end end st2:begin if(KEY0)begin LEDR0=1'b0;LEDG0=1'b1;LEDG1=1'b0;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;nxstate=st1;end else if(KEY1)begin LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b0;LEDG4=1'b1;LEDG5=1'b0;nxstate=st6;end else if(KEY3)LEDR0=1'b0;LEDG0=1'b1,LEDG1=1'b1;LEDR4=1'b1;LEDG4=1'b0,LEDG5=1'b0;nxstate=st2;else if(sensor2)begin LEDR0=1'b0;LEDG0=1'b0;LEDG1=1'b1;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;nxstate=st3;end end end st3:begin if(KEY0)begin LEDR0=1'b0;LEDG0=1'b1;LEDG1=1'b0;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;nxstate=st1;end else if(KEY1)begin LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b0;LEDG4=1'b1;LEDG5=1'b0;nxstate=st6;end else if(KEY3)LEDR0=1'b0;LEDG0=1'b0;LEDG1=1'b1;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;nxstate=st3;else if(sensor1)begin LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b1;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;nxstate=st4;end end end st4:begin if(KEY0)begin LEDR0=1'b0;LEDG0=1'b1;LEDG1=1'b0;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;nxstate=st1;end else if(KEY1)begin LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b0;LEDG4=1'b1;LEDG5=1'b0;nxstate=st6;end else if(KEY3)LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b1;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;nxstate=st4;else if(sensor1)begin LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b0;LEDG4=1'b0;LEDG5=1'b1;nxstate=st5;end end end st5:begin if(KEY0)begin LEDR0=1'b0;LEDG0=1'b1;LEDG1=1'b0;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;nxstate=st1;end else if(KEY1)begin LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b0;LEDG4=1'b1;LEDG5=1'b0;nxstate=st6;end else if(KEY3)LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b0;LEDG4=1'b0;LEDG5=1'b1;nxstate=st5;else if(sensor3)begin LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b0;LEDG4=1'b1;LEDG5=1'b0;nxstate=st6;end end end st6:begin if(KEY0)begin LEDR0=1'b0;LEDG0=1'b1;LEDG1=1'b0;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;nxstate=st1;end else if(KEY1)begin LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b0;LEDG4=1'b1;LEDG5=1'b0;nxstate=st6;end else if(KEY3)LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b0;LEDG4=1'b1;LEDG5=1'b0;nxstate=st6;else if(sensor4)begin LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b0;LEDG4=1'b1;LEDG5=1'b1;nxstate=st7;end end end st7:begin if(KEY0)begin LEDR0=1'b0;LEDG0=1'b1;LEDG1=1'b0;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;nxstate=st1;end else if(KEY1)begin LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b0;LEDG4=1'b1;LEDG5=1'b0;nxstate=st6;end else if(KEY3)LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b0;LEDG4=1'b1;LEDG5=1'b1;nxstate=st7;else if(sensor2)begin LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b0;LEDG4=1'b0;LEDG5=1'b1;nxstate=st8;end end end st8:begin if(KEY0)begin LEDR0=1'b0;LEDG0=1'b1;LEDG1=1'b0;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;nxstate=st1;end else if(KEY1)begin LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b0;LEDG4=1'b1;LEDG5=1'b0;nxstate=st6;end else if(KEY3)LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b0;LEDG4=1'b0;LEDG5=1'b1;nxstate=st8;else if(sensor1)begin LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b1;nxstate=st9;end end end st9:begin if(KEY0)begin LEDR0=1'b0;LEDG0=1'b1;LEDG1=1'b0;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;nxstate=st1;end else if(KEY1)begin LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b0;LEDG4=1'b1;LEDG5=1'b0;nxstate=st6;end else if(KEY3)LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b1;nxstate=st9;else if(sensor1)begin LEDR0=1'b0;LEDG0=1'b0;LEDG1=1'b1;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;nxstate=st10;end end end st10:begin if(KEY0)begin LEDR0=1'b0;LEDG0=1'b1;LEDG1=1'b0;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;nxstate=st1;end else if(KEY1)begin LEDR0=1'b1;LEDG0=1'b0;LEDG1=1'b0;LEDR4=1'b0;LEDG4=1'b1;LEDG5=1'b0;nxstate=st6;end else if(KEY3)LEDR0=1'b0;LEDG0=1'b0;LEDG1=1'b1;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;nxstate=st10;else if(sensor3)begin LEDR0=1'b0;LEDG0=1'b1;LEDG1=1'b0;LEDR4=1'b1;LEDG4=1'b0;LEDG5=1'b0;nxstate=st1;end end end endcase end endmodule 2.3 定時器模塊

第二篇:基于FPGA的交通燈控制器設計

數字系統課程設計

基于FPGA的交通控制燈設計

姓名:

學號:

班級:

摘要

隨著社會的發展,城市規模的不斷擴大,城市交通成為制約城市發展的一大因素。人口和汽車日益增長,市區交通也日益擁擠,人們的安全問題當然也日益重要。因此,紅綠交通信號燈成為交管部門管理交通的重要工具之一。有了交通燈,人們的安全出行也有了很大的保障。自從交通燈誕生以來,其內部的電路控制系統就不斷的被改進,設計方法也開始多種多樣,從而使交通燈顯得更加智能化。尤其是近幾年來,隨著電子與計算機技術的飛速發展,電子電路分析和設計方法有了很大的改進,電子設計自動化也已經成為現代電子系統中不可或缺的工具和手段,這些都為交通燈控制系統的設計提供了一定的技術基礎。本課程設計運用erilog HDL語言描述交通控制器,通過狀態機計數法,實現設計所要求的交通燈控制及時間顯示,并最后進行了軟件實現,達到了系統要求的功能。

設計原理

1.1設計要求

設計一個交通控制器,用LED顯示燈表示交通狀態,并以7段數碼顯示器顯示當前狀態剩余秒數 主干道綠燈亮時,支干道紅燈亮;反之亦然,二者交替允許通行,主干道每次放行35s,支干道每次放行25s。每次由綠燈變為紅燈的過程中,亮光的黃燈作為過渡,黃燈的時間為5s。能進行特殊狀態顯示,特殊狀態時東西、南北路口均顯示紅燈狀態。用LED燈顯示倒計時,并且能實現總體清零功能,計數器由初始狀態開始計數,對應狀態的顯示燈亮。能實現特殊狀態的功能顯示,1.2設計思路和原理

本次設計是針對十字路口,進行南北和東西直行情況下交通燈控制。設定東西方向為主干道方向,根據交通燈的亮的規則,在初始狀態下四個方向的都為紅燈亮啟,進入正常工作狀態后,當主干道上綠燈亮時,支干道上紅燈亮,持續35S后,主干道和支干道上的黃燈都亮啟,持續5S后,主干道上紅燈亮啟,支干道上綠燈亮啟持續25S,之后主干道和支干道上的黃燈都亮啟5s,一個循環完成。循環往復的直行這個過程。其過程如下圖所示:

0s主干道方向25s綠燈亮30s紅燈亮黃燈亮65s支干道方向0s紅燈亮35s綠燈亮黃燈亮60s65s

圖1.交通燈點亮時間控制說明

1.3實現方法

本次采用文本編輯法,即利用Verilog HDL語言描述交通控制器,通過狀態機計數法,實現設計所要求的交通燈控制及時間顯示。設計中用兩組紅黃綠LED模擬兩個方向上的交通燈,用4個7段數碼管分別顯示兩個方向上的交通燈剩余時間,控制時鐘由試驗箱上頻率信號提供。

Verilog HDL程序設計

2.1整體設計

根據上章設計原理,交通燈控制的關鍵是各個狀態之間的轉換和進行適當的時間延時,根據狀態機的設計規范,本次設計了三個狀態之間的循環轉化,其真值表及狀態轉化圖如下所示:

狀狀00狀狀00狀狀10狀狀11狀狀01狀狀01狀狀11狀狀10狀狀狀狀狀狀狀狀狀狀001狀狀狀狀狀010狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀狀狀狀狀狀100狀狀狀狀狀010狀狀狀狀狀001狀狀狀狀狀010

圖2.交通燈控制狀態轉化

說明:該狀態圖為交通燈在正常情況下的狀態轉化圖,進入控制后,狀態00時主干道綠燈及支干道紅燈亮起,進入狀態01后兩路黃燈亮起,狀態11時主干道紅燈及支干道綠燈亮起。進入10狀態兩路黃燈亮起。結束一個循環,從00狀態重新開始循環。

為實現控制與顯示的功能,需要設計交通燈點亮順序控制程序,倒數計時程序,七段數碼管顯示程序,數碼管顯示掃描程序,其系統結構圖如下所示:

holdrst狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀clk1KHz狀狀狀狀狀狀狀1Hz狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀狀 圖3.交通燈控制系統結構圖

其中rst為復位信號,clk為時鐘信號,hold為特殊情況控制信號,輸入hold時兩個方向紅燈無條件亮起。

2.2 具體設計

根據整體設計要求,編寫各個功能部分Verilog HDL程序,設置各輸入輸出變量說明如下 clk: 為計數時鐘; qclk:為掃描顯示時鐘;

en: 使能信號,為1 的話,則控制器開始工作; rst: 復位信號,為1的話,控制及技術回到初始狀態;

hoid:特殊情況控制信號,為1的話,則兩個方向無條件顯示為紅燈;

light1: 控制主干道方向四盞燈的亮滅;其中,light1[0]~light[2],分別控制主干道方向的 綠燈、黃燈和紅燈;

light2: 控制支干道方向四盞燈的亮滅;其中,light2[0] ~ light2[2],分別控制支干道方向的 綠燈、黃燈和紅燈;

num1: 用于主干道方向燈的時間顯示,8 位,可驅動兩個數碼管; num2: 用于支干道方向燈的時間顯示,8 位,可驅動兩個數碼管; counter:用于數碼管的譯碼輸出; st1,st2:數碼管掃描信號。輸入輸出及中間變量設置如下:

module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output[7:0] num1,num2;output[6:0]counter;output[2:0] light1,light2;reg tim1,tim2,st1,st2;reg[1:0]state1,state2,ste;reg[2:0]light1,light2;reg[3:0]num;reg[6:0]counter;reg[7:0] num1,num2;reg[7:0] red1,red2,green1,green2,yellow1,yellow2;

1.二極管點亮控制

該部分程序的作用是根據計數器的計數值控制發光二極管的亮、滅,以及輸出倒計時數值給七段數碼管的譯碼電路。此外,當檢測到特殊情況(hold=‘1’)發生時,無條件點亮紅燈的二極管,當檢測到復位信號,兩個方向計數與控制回復到00狀態。因為主、支干道兩個方向二極管點亮的順序與延遲時間不同,顧編寫兩個獨立的部分來控制,具體程序如下: 1)主干道方向 always @(posedge clk)begin

if(rst)//復位與特殊情況控制

begin light1<=3'b001;num1<=green1;end else if(hold)begin light1<=3'b100;num1<=green1;end else if(en)

begin //使能有效開始控制計數

if(!tim1)//

begin //主干道交通燈點亮控制

tim1<=1;

case(state1)

2'b00:begin num1<=green1;light1<=3'b001;state1<=2'b01;end

2'b01:begin num1<=yellow1;light1<=3'b010;state1<=2'b11;end

2'b11:begin num1<=red1;light1<=3'b100;state1<=2'b10;end

2'b10:begin num1<=yellow1;light1<=3'b010;state1<=2'b00;end

default:light1<=3'b100;

endcase

end 2)支干道方向

always @(posedge clk)begin

if(rst)//復位與特殊情況控制

begin

light2<=3'b100;

num2<=red2;

end

else if(hold)

begin

light2<=3'b100;

num2<=red2;

end

else if(en)

begin

if(!tim2)

begin

tim2<=1;

case(state1)

2'b00:begin num2<=red2;light2<=3'b100;state2<=2'b01;end

2'b01:begin num2<=yellow1;light2<=3'b010;state2<=2'b11;end

2'b11:begin num2<=green2;light2<=3'b001;state2<=2'b10;end

2'b10:begin num2<=yellow2;light2<=3'b010;state2<=2'b00;end

default:light2<=3'b100;

endcase

end

2.倒數計時

該部分程序完成二極管發光時延的計數,并將計數結果送到數碼管顯示電路,每切換到一個狀態,計數器的初值都被重置,以實現不同顏色二極管不同的時延要求。本次設計直接用邏輯運算完成2位十進制數的計數,未采用分位器的設計。因為主、支干道上計數器的結構完全相同,顧只列出一路的程序,其具體程序如下所示:

always @(posedge clk)begin else begin //倒數計時

if(num1>0)

if(num1[3:0]==0)

begin

num1[3:0]<=4'b1001;

num1[7:4]<=num1[7:4]-1;

end

else num1[3:0]<=num1[3:0]-1;

if(num1==1)tim1<=0;

end

end

else

begin

light1<=3'b010;

num1=2'b00;

tim1<=0;

end end

3.數碼管的譯碼及掃描顯示

該段程序主要完成4個7段數碼管的譯碼顯示及掃描,使系統能正常顯示主、支干道兩個方向上的剩余時間。譯碼的時鐘頻率要低,為Hz級。掃描的時鐘頻率要高,最低不得小于人眼分辨頻率50Hz,具體程序如下所示: always @(posedge qclk)begin //數碼管掃描

if(rst1)

begin

st1=0;

st2=0;

end else

begin

case({st2,st1})

2'b00:begin num<=num1[3:0];{st2,st1}<=2'b01;end

2'b01:begin num<=num1[7:4];{st2,st1}<=2'b10;end

2'b10:begin num<=num2[3:0];{st2,st1}<=2'b11;end

2'b11:begin num<=num2[7:4];{st2,st1}<=2'b00;end

endcase

end end always @(posedge qclk)begin //數碼管譯碼顯示 case(num)4'b0000: counter<=7'b0111111;//0 4'b0001: counter<=7'b0000110;//1 4'b0010: counter<=7'b1011011;//2 4'b0011: counter<=7'b1001111;//3 4'b0100: counter<=7'b1100110;//4 4'b0101: counter<=7'b1101101;//5 4'b0110: counter<=7'b1111101;//6 4'b0111: counter<=7'b0000111;//7 4'b1000: counter<=7'b1111111;//8 4'b1001: counter<=7'b1101111;//9 default: counter<=7'b0111111;//0 endcase end endmodule 總體程序見程序清單所示

仿真與硬件調試

3.1 波形仿真

在QuartursⅡ軟件下創建工程,新建編輯設計文件,將程序輸入,整體編譯后,新建波形仿真文件。設置仿真時間,時鐘周期,輸入輸出端口,進行波形仿真。具體仿真波形圖及說明如下所示: 仿真截止時間:100us; 時鐘:clk 1us,qclk 0.1us 1.正常工作時波形仿真圖

圖4.正常工作時波形仿真圖

圖形說明

波形仿真主要完成了控制與計數以及數碼管顯示的波形圖。en為低電品時,計數器置初值,高電平時開始正??刂婆c計數??刂瓢l光二極管首次輸出為“light1=001,light2=100”,表示主干道路綠燈亮,支桿道路紅燈亮,計數器num1和num2從“00110101”開始遞減計數,計數至“00000000”時,進入下一個狀態,控制輸出量為light=010,light2=010,表示主、支干道黃燈均亮起,計數器num1和num2從“00000101”開始計數遞減,計數至”00000000”時進入下一個狀態,light=100,light2=001,表示主干道路紅燈亮,支桿道路綠燈亮。Counter根據num1,num2變化隨時鐘上升沿輸出譯碼后的數據。由于屏幕顯示大小有限,未仿真出一個完整周期。

2.特殊情況仿真波形

圖5.特殊情況仿真波形

圖形說明

當hold輸入高電平時,在時鐘上升沿的控制下,light 1與light2被強制置位為”100”,表示兩路紅燈均亮起

3.復位情況仿真波形

圖6.復位情況仿真波形

圖形說明

當rst輸入高電平時,在時鐘上升沿控制下,計數與控制都回到00狀態,即light1=001,light2=100,計數器num1和num2從“00110101”開始遞減計數。3.2 硬件調試

完成時序仿真確認無誤后,進行實驗箱管腳設置,注意設置完成后一定要再進行一次全局仿真,使程序真正對應于硬件輸出輸出。具體連接說明如下所示

輸入變量:rst、clk、qclk、hold、en 其中en,hold,rst接”0-1”撥碼開關,以穩定的輸出可變化的電平。計數時鐘clk接實驗箱上1Hz時鐘,掃描顯示時鐘qclk接125Khz時鐘。

輸出變量:light1[2:0]、light2[2:0]、counter[6:0]、st1、st2 其中light1[0]、light2[0]分別接綠色的發光二極管;light1[1]、light2[1] 分別接黃色的發光二極管;light1[2]、light2[2]分別接紅色的發光二極管。counter[0]~counter[6],分別接七段數碼管的a~f,st1、st2分別接試驗箱上”4-16”譯碼器的低兩位。

完成接線后將程序燒寫到芯片上,開始功能調試。分辨改變使能信號,復位信號以及特殊情況信號,觀察數碼管以及發光二級管情況。

程序清單

module traffic(en,clk,qclk,rst,rst1,hold,num1,num2,light1,light2,counter,st1,st2);input en,clk,qclk,rst,hold,rst1;output st1,st2;output[7:0] num1,num2;output[6:0]counter;output[2:0] light1,light2;reg tim1,tim2,st1,st2;reg[1:0]state1,state2,ste;reg[2:0]light1,light2;reg[3:0]num;reg[6:0]counter;reg[7:0] num1,num2;reg[7:0] red1,red2,green1,green2,yellow1,yellow2;

always @(en)if(!en)begin //設置計數初值 green1<=8'b00110101;red1<=8'b00100101;yellow1<=8'b00000101;green2<=8'b00100101;red2<=8'b00110101;yellow2<=8'b00000101;end

always @(posedge clk)begin if(rst)//復位與特殊情況控制

begin

light1<=3'b001;num1<=green1;

end else if(hold)

begin

light1<=3'b100;

num1<=green1;

end

else if(en)

begin //使能有效開始控制計數

if(!tim1)//開始控制

begin //主干道交通燈點亮控制

tim1<=1;

case(state1)

2'b00:begin num1<=green1;light1<=3'b001;state1<=2'b01;end

2'b01:begin num1<=yellow1;light1<=3'b010;state1<=2'b11;end

2'b11:begin num1<=red1;light1<=3'b100;state1<=2'b10;end

2'b10:begin num1<=yellow1;light1<=3'b010;state1<=2'b00;end

default:light1<=3'b100;

endcase

end

else

begin //倒數計時

if(num1>0)

if(num1[3:0]==0)

begin

num1[3:0]<=4'b1001;

num1[7:4]<=num1[7:4]-1;

end

else num1[3:0]<=num1[3:0]-1;

if(num1==1)tim1<=0;

end

end

else

begin

light1<=3'b010;

num1=2'b00;

tim1<=0;

end

end

always @(posedge clk)begin

if(rst)//復位與特殊情況控制

begin

light2<=3'b100;

num2<=red2;

end

else if(hold)

begin

light2<=3'b100;

num2<=red2;

end

else if(en)

begin

if(!tim2)

begin

tim2<=1;

case(state1)

2'b00:begin num2<=red2;light2<=3'b100;state2<=2'b01;end

2'b01:begin num2<=yellow1;light2<=3'b010;state2<=2'b11;end

2'b11:begin num2<=green2;light2<=3'b001;state2<=2'b10;end

2'b10:begin num2<=yellow2;light2<=3'b010;state2<=2'b00;end

default:light2<=3'b100;

endcase

end

else

begin //倒數計時

if(num2>0)

if(num2[3:0]==0)

begin

num2[3:0]<=4'b1001;

num2[7:4]<=num2[7:4]-1;

end

else num2[3:0]<=num2[3:0]-1;

if(num2==1)tim2<=0;

end

end

else

begin

tim2<=0;

state2<=2'b00;

light2<=3'b010;

end

end

always @(posedge qclk)begin //數碼管掃描

if(rst1)

begin

st1=0;

st2=0;

end else

begin

case({st2,st1})

2'b00:begin num<=num1[3:0];{st2,st1}<=2'b01;end

2'b01:begin num<=num1[7:4];{st2,st1}<=2'b10;end

2'b10:begin num<=num2[3:0];{st2,st1}<=2'b11;end

2'b11:begin num<=num2[7:4];{st2,st1}<=2'b00;end

endcase

end end always @(posedge qclk)begin //數碼管譯碼顯示 case(num)4'b0000: counter<=7'b0111111;//0 4'b0001: counter<=7'b0000110;//1 4'b0010: counter<=7'b1011011;//2 4'b0011: counter<=7'b1001111;//3 4'b0100: counter<=7'b1100110;//4 4'b0101: counter<=7'b1101101;//5 4'b0110: counter<=7'b1111101;//6 4'b0111: counter<=7'b0000111;//7 4'b1000: counter<=7'b1111111;//8 4'b1001: counter<=7'b1101111;//9 default: counter<=7'b0111111;//0 endcase end endmodule

總結

在設計中采用V erilog HDL語言設計交通燈控制系統, 借助其功能強大的語言結構, 簡明的代碼描述復雜控制邏輯設計, 與工藝無關特性, 在提高工作效率的同時達到求解目的, 并可以通過V erilog HDL 語言的綜合工具進行相應硬件電路生成, 具有傳統邏輯設計方法所無法比擬的優越性。

在設計過程中,覺得最難的部分是波形仿真部分,雖然程序編譯通過但仿真出不了正確的波形,不是計數器無法正常計數,就是控制輸出無法進入到下一個狀態,每次出現問題就必須返回重新修改程序。實踐證明,在編寫一個較復雜的程序時,一開始一定要畫流程圖,弄清楚各個功能及實現它們的邏輯算法,做到心中有數后在開始下筆寫編寫程序。在編寫的時候要尤其要注意語言的規范,如本次設計中編寫的V erilog在Quartus8.1中可以正常生成時序圖,而在低版本的軟件中卻無法生成,原因就是語言使用不規范,在解決這個問題時我總結了一些經驗,首先程序要邏輯清晰,簡潔明了,避免不必要的嵌套與條用,其次要適當地給程序加上注解文字,提高可讀性,以方便之后的程序出錯時進行查找,最后充分利用仿真軟件提供的各項編譯工具與報錯消息,按圖索驥,有方向的完成程序調試。

完成仿真后進行,進行試驗箱上的硬件調試,該步驟主要是要求細心,按照引腳清單,逐一完成連線,本次設計用到兩個時鐘輸入,注意一定要選擇合適頻率的時鐘,以便達到期望的效果。注意觀察實物的現象,看是否滿足設計要求,不滿足時檢查是硬件問題還是程序問題,如果是程序問題,在修改完之后必須要重新編譯,重新燒入。不斷排查錯誤,直至達到滿意的效果。

通過這次課程設計,熟悉了簡單EDA設計的整個流程,加深了對Verilog HDL硬件描述語言的理解,提高了動手能力,并且鍛煉了自己的耐心,收獲頗豐,我會把在本次課程設計中學到的東西應用到今后的工作學習中。

參考資料

[1] 夏宇聞.復雜數字電路與系統的V erilog HDL設計技術 [M ].北京: 北京航空航天大學出版社, 1998 [2] 郭梯云.移動通信[M ].西安: 西安電子科技大學出版社, 1995 [3] [法]M ichelMouly, M arie Bernadet te Pautet1GSM 數字移動通信系統[M ].駱健霞, 顧龍信, 徐云霄譯.北京: 電子工業出版社, 1996 [4] 張毅剛, 喬立巖.虛擬儀器軟件開發環境L abW indow s?CV I 610 編程指南[M ].北京: 機械工業出版社, 2002 [5] 劉國權.GSM 手機的測試[J ].中國無線電管理, 2003 [6] 俞定玖, 劉湘慧.GSM 數字蜂窩移動交換系統測試[J ].電信科學, 2000 [7] 張明.V erilog HDL 實用教程[M ].成都: 電子科技大學出版社, 1999 [8] Hyde D C.Bucknell Handbook on V erilog HDL 1Computer Science Department, Bucknell U niversity L ew is burg, 1995 [9] 康華光.電子技術基礎(數字部分)[M ].北京: 高等教育出版社, 1988

第三篇:基于FPGA的彩燈控制器設計

鄭州輕工業學院

可編程數字系統設計

題 目 學生姓名 專業班級 學 號 院(系)指導教師 完成時間

基于FPGA的彩燈控制器的設計 張煥煥 電子信息工程10-2班 電氣信息工程學院

基于FPGA的彩燈控制器設計

摘 要

隨著科技的發展 , 在現代生活中, 彩燈作為一種景觀應用越來越多。而在電子電路設計領域中,電子設計自動化(EDA)工具已成為主要的設計手段,VHDL語言則是EDA的關鍵技術之一,它采用自頂向下的設計方法,即從系統總體要求出發,自上至下地將設計任務分解為不同的功能模塊,最后將各功能模塊連接形成頂層模塊,完成系統硬件的整體設計。本文介紹了基于EDA技的多路彩燈控制器的設計與分析。在MAX+PLUSII環境下采用VHDL語言實現,論述了基于VHDL語言和FPGA芯片的數字系統設計思想和實現過程。電子設計自動化技術EDA的發展給電子系統的設計帶來了革命性的變化,EDA軟件設計工具,硬件描述語言,可編程邏輯器件使得EDA技術的應用走向普及。FPGA是新型的可編程邏輯器件,采用FPGA進行產品開發可以靈活地進行模塊配置,大大縮短了產品開發周期,也有利于產品向小型化,集成化的方向發展。

關鍵詞: VHDL 彩燈 仿真

1、概述

1.1、設計目的:

設計一個彩燈控制器,使彩燈(LED管)可以實現四種花樣循環變化及兩種不同頻率的閃爍,有復位開關。整個系統有七個輸入信號CLK,CLR,A,B,C,D,OPT,六個輸出信號控制六個彩燈。OPT的高低電平控制彩燈閃爍的快慢,A,B,C,D控制各種不同花樣彩燈的變換。此彩燈控制系統設定有四種花樣變化。四種花樣分別為:a.彩燈從左到右逐次亮起,再逐次從右到左熄滅;b.彩燈兩邊同時亮兩個,再逐次向中間亮;c.彩燈從左到右兩個兩個的亮,再從右到左兩個兩個逐次的亮;d.彩燈中間兩個亮,再同時向兩邊散開。

1.2、設計要求:

? 掌握FPGA 的程序設計方法。? 掌握硬件描述語言語法。

? 程序設計完成后要求在軟件中實現功能仿真。

2、系統設計

2.1、設計原理:

整個系統共有七個輸入信號:基準時鐘信號CLK,系統清零信號(復位信號)CLR,彩燈節奏快慢選擇開關OPT;共有4個輸出信號Q[3..0],分別用于控制四路彩燈。據此,我們可將整個彩燈控制器CDKZQ分為四大部分:彩燈花樣控制部分、分頻部分、定時部分和計數部分。當各個模塊均完成上述操作之后,形成最后的四路彩燈顯示系統,并且進行仿真。仿真通過,即可下載到指定的FPGA芯片里面,并進行實際連線,進行最后的硬件測試。把分頻部分的不同頻率的時鐘信號CP輸送到計數部分 ,從而控制彩燈閃爍速度的快慢 ,定時部分控制每種速度維持的時間長短。

圖表 1 2.

2、設計方案:

在電路中以 1 代表燈亮,以 0 代表燈滅,由 0、1按不同的規律組合代表不同的燈光圖案,同時使其選擇不同的頻率,從而實現多種圖案多種頻率的花樣功能顯示。在該電路中只需簡單的修改程序就可以靈活地調整彩燈圖案和變化方式。下面就以一個四路彩燈控制系統的實現為例進行簡單說明。此四路彩燈控制系統設定有四種花樣變化。彩燈圖案狀態變換的速度有快、慢兩種。

3、程序仿真過程

start compilation先編譯

generate functional simulation netlist然后生成功能仿真網絡表 assignments–setting—simulation setting設置成功能仿真 然后新建一個vector waveform file 通過view—utility windows--node finder 把輸入輸出管腳添加進波形仿真圖里 點擊start simulation 得到仿真圖WAVEFORM1:

由圖可見:正常情況下 燈按照花樣abcd的順序循環d在80NS---120NS的高電平使得花樣變為D花樣,D高電平結束,燈順序進行A花樣。

OPT 在80NS---170NS高電平使得燈變換速度提高2倍 但是001100和100000這兩種燈的狀態任然占用了兩個時鐘周期,這是因為花樣d和花樣a狀態轉換之間沒有立即銜接,導致220NS處CLR高電平使得燈全部清0,不再變化DIV2是二分頻輸出,由圖可見是輸入時鐘CLK的二分頻

4、實驗結果分析

實驗表明 ,此設計方法能夠滿足多種不同花樣彩燈的變化要求 ,并且該方法便于擴展不同變化模式的彩燈花樣,同時又實現了彩燈的兩種不同頻率的閃爍。如果不按任何按鍵時候,燈就按四種花樣順序循環跑,如果按下某個鍵再松開,比如按下C鍵然后松開,那么不管之前燈跑到哪個花樣,按鍵后燈就會從C代表的花樣處開始跑,然后是D花樣,然后是A花樣,依次循環。但是A,B,C,D認為是按下會彈起的按鍵,因為這個程序里,如果一直按著按鍵不松手,會導致燈只是反復跑一個花樣。比如按著B鍵不松手,那么就會反復跑B花樣。還有不能允許同時按下兩個鍵,三個鍵,4個鍵,也就是說,同一時刻ABCD只能有一個是高電平,否則會出錯,因為這個程序并沒有防錯機制。

5、心得體會

本次設計的課題是彩燈控制器的設計,當拿到這個課題的時候經過分析就知道關鍵是計數器和分頻器的使用,分頻的方法有很多種,對于同一種功能的實現,用VHDL可以采用多種方式進行描述,每種方式之間各有優劣,本次設計只采用了其中較簡單的一種,應盡量用最簡潔的語言寫出所需功能的程序。

通過這次課程設計對EDA技術有了更進一步的熟悉,VHDL 語言和C語言等其他語言還是有很大的區別。VHDL是EDA技術的重要組成部分,其具有與具體硬件電路無關和與設計平臺無關的特性,并且具有良好的電路行為描述和系統描述的能力,并在語言易讀性和層次化、結構化設計方面,表現了強大的生命力和應用潛力。其主要的也是最大的優點就在于設計者可以專心致力于其功能的實現,而不需要對不影響功能的與工藝有關的因素花費過多的時間和精力。在實際操作中發現設計和課本上的知識有很大聯系,但又高于課本,一個簡單的原理要把它應用以及和其他功能綜合起來就有些困難。通過設計也鞏固了我們的書本知識以及通過借閱書籍和上網查找資料,也豐富了自己對EDA的了解。

6、致謝

7、參考文獻

[1] 周潤景.基于QuartusⅡ的FPGA/CPLD數字系統設計實例[M].電子工業出版社.2007,8

[2] 潘松 黃繼業.EDA技術實用教程(第二版).北京:科學出版社,2006.9 [3] 林明權 馬維旻 VHDL數字控制系統設計范例.電子工業出版社2003,1 [4] 褚振勇.FPGA設計及應用(第三版)[M].西安電子科技大學出版社.2012,4

8、附錄

彩燈控制器的源程序

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity horseracelamp is port(clk:in std_logic;clr:in std_logic;a:in std_logic;b:in std_logic;c:in std_logic;d:in std_logic;opt:in std_logic;q:out std_logic_vector(5 downto 0);div2:out std_logic);end;architecture one of horseracelamp is

type states is(s0,s1,s2,s3);

signal present:states;

signal q1:std_logic_vector(5 downto 0);

signal count:std_logic_vector(3 downto 0);

signal halfclk:std_logic_vector(1 downto 0);

signal clkin:std_logic_vector(1 downto 0);begin

process(clk)--------------------該進程實現二分頻 begin if clk'event and clk='1' then

halfclk<=halfclk+1;end if;end process;

process(opt)---------------------該進程實現OPT高時候用原來的時鐘,OPT低的時候用二分頻后的時鐘,信號CLKIN(0)會傳遞到下一個進程里

begin

if opt='0' then

clkin(0)<=halfclk(0);

else

clkin(0)<=clk;

end if;

end process;

process(clk,clr,a,b,c,d)

------------S1,S2,S3,S4分別對應

A,B,C,D四種花樣,它們之間會自動按順序循環,也

會因為A,B,C,D中某個置高而改變循環順序,所以用了大量的IF ELSIF語句

begin if clr='1' then

present<=s0;

q1<=(others=>'0');elsif clkin(0)'event and clkin(0)='1' then

case present is

when s0=>if q1=“000000”then

q1<=“100000”;else

if count=“1100” then

count<=(others=>'0');q1<=“100001”;present<=s1;

elsif b='1'then

count<=(others=>'0');

q1<=“100001”;

present<=s1;

elsif c='1'then

count<=(others=>'0');

q1<=“110000”;

present<=s2;

elsif d='1'then count<=(others=>'0');

q1<=“001100”;

present<=s3;

else

case count is when “0000”=>q1<=“100000”;when “0001”=>q1<=“110000”;when “0010”=>q1<=“111000”;when “0011”=>q1<=“111100”;when “0100”=>q1<=“111110”;when “0101”=>q1<=“111111”;when “0110”=>q1<=“111110”;when “0111”=>q1<=“111100”;when “1000”=>q1<=“111000”;when “1001”=>q1<=“110000”;when “1010”=>q1<=“100000”;when “1011”=>q1<=“000000”;when others=>null;end case;

count<=count+1;present<=s0;

end if;end if;

when s1=>if count=“0011” then

count<=(others=>'0');q1<=“110000”;present<=s2;elsif a='1'then

count<=(others=>'0');

q1<=“100000”;

present<=s0;

elsif c='1'then

count<=(others=>'0');

q1<=“110000”;

present<=s2;

elsif d='1'then count<=(others=>'0');

q1<=“001100”;

present<=s3;

else

case count is when “0000”=>q1<=“100001”;when “0001”=>q1<=“110011”;when “0010”=>q1<=“111111”;when others=>null;end case;

count<=count+1;present<=s1;

end if;

when s2=>if count=“0110” then

count<=(others=>'0');q1<=“001100”;present<=s3;elsif a='1'then

count<=(others=>'0');

q1<=“100000”;

present<=s0;

elsif b='1'then

count<=(others=>'0');

q1<=“100001”;

present<=s1;

elsif d='1'then count<=(others=>'0');

q1<=“001100”;

present<=s3;

else

case count is

when “0000”=>q1<=“110000”;when “0001”=>q1<=“111100”;when “0010”=>q1<=“111111”;when “0011”=>q1<=“000011”;when “0100”=>q1<=“001100”;when “0101”=>q1<=“110000”;when others=>null;end case;

count<=count+1;present<=s2;

end if;

when s3=>if count=“0011” then

count<=(others=>'0');q1<=“100000”;present<=s0;elsif a='1'then

count<=(others=>'0');

q1<=“100000”;

present<=s0;

elsif b='1'then

count<=(others=>'0');

q1<=“100001”;

present<=s1;

elsif c='1'then count<=(others=>'0');

q1<=“110000”;

present<=s2;

else

case count is when “0000”=>q1<=“001100”;when “0001”=>q1<=“010010”;when “0010”=>q1<=“100001”;when others=>null;end case;

count<=count+1;present<=s3;

end if;

end case;

end if;

end process;

div2<=halfclk(0);

q<=q1;

end;

第四篇:基于FPGA的乒乓球游戲機控制器設計

遼寧科技學院本科生畢業設計(論文)第I頁

基于FPGA的乒乓球游戲機設計

摘 要

Verilog是甚高速集成電路硬件描述語言。目前,verilog已成為許多設計自動化工具普遍采用的標準化硬件描述語言。verilog語言功能性強,覆蓋面廣,靈活性高,具有很好的實用性。本文設計一個基于verilog的乒乓游戲機,乒乓游戲機由狀態機、記分器、譯碼顯示器與按鍵去抖等部分所組成。通過對各部分編寫verilog程序,然后進行編譯、仿真、邏輯綜合、邏輯適配,最后進行編程下載,并且通過EDA實驗箱的驗證,實現乒乓游戲機的基本功能。

關鍵詞:verilog;EDA;乒乓游戲機

遼寧科技學院本科生畢業設計(論文)第II頁

Abstract

VERILOG is high speed IC hardware describe language.VERILOG already becomes the language of normalizing hardware describe that a lot of design automation implement adopts commonly at present.The VERILOG language function is strong.The face covering is broad, flexibility high and have the very good pragmatism.One main body of the book is designed waits for what part group is accomplished owing to that VERILOG table tennis game machine, table tennis game machine go to tremble from state machine, marker, decoding display and button.By compiling and composing VERILOG procedure to every part, then compiling, simulate, logic synthesis, logic fitting.Carry out programming time be loaded with finally.Then verification and by GW48 type EDA experiment box, realize table tennis game machine’s fundamental function.Key words: VERILOG:EDA;Table tennis game machine

遼寧科技學院本科生畢業設計(論文)第III頁

目 錄 緒論..............................................................1

1.1課題的背景和意義...........................................1 1.2國內外研究現狀.............................................1 1.3本論文的主要內容...........................................2 2 Quartus II與Modelsim 軟件簡介....................................3

2.1Quartus II 簡介.............................................3 2.2Modelsim簡介...............................................4 3 方案選擇與系統總體設計............................................6

3.1整體方案的選擇.............................................6

3.1.1設計任務與要求.......................................6 3.1.2設計的原理和方法.....................................7 3.1.3芯片的選擇...........................................8 3.2系統總體設計...............................................8

3.2.1乒乓游戲機的組成示意圖...............................8 3.2.2本系統的邏輯分框圖...................................9 系統各部分電路的詳細設計.........................................10 4.1七段數碼管顯示譯碼電路....................................10 4.2按鍵去抖電路..............................................11 4.3狀態機設計................................................11 4.3.1狀態機的6種狀態及狀態轉移..........................11 4.3.2狀態機/球臺控制電路.................................13

遼寧科技學院本科生畢業設計(論文)第IV頁

4.4記分器設計................................................15 5 系統的整體綜合與仿真.............................................16 5.1頂層文件設計..............................................16 5.2系統程序框圖:............................................17 5.3整個系統的綜合與仿真......................................18 5.3.1 電路符號...........................................18 5.3.2 系統仿真...........................................18 6 系統的運行與仿真過程.............................................20 6.1系統程序的編譯............................................20 6.2 系統的仿真................................................22 結論...............................................................24 謝 辭..............................................................25 參考文獻...........................................................26 附錄...............................................................27

遼寧科技學院本科生畢業設計(論文)第1頁 緒論

1.1課題的背景和意義

隨著人們的物質生活越來越好了,人們開始對娛樂生活有了新的要求,特別是進入新世紀以來各種電子產品的不斷出現,更是促進了我國電子行業的發展,為此,能夠推出一款新的游戲產品是非常有前景的,本設計正是考慮了當前的社會現狀,想設計出一款“乒乓球”游戲機,以往可能有過這方面的設計出現過,但是那些大多數都是采用的單片機等來實現的,本設計將采用最新的FPGA技術對“乒乓球”游戲機進行實現。

日常娛樂生活中,智能化的娛樂產品非常流行。FPGA具有功能強、可靠性高、使用方便、體積小及重量輕等優點。國外已廣泛應用于自動化控制的各個領域。近年來,國內的FPGA技術與產品開發應用方面的發展也很快,各種電子產品已越來越多地采用FPGA控制系統且性價比高。本文從實用的角度以Altera公司的EP2C35F484I8芯片為核心設計了一種智能“乒乓球”游戲機。實踐證明,該游戲機運行狀況穩定、可靠,滿足了智能化要求。

1.2國內外研究現狀

隨著社會的進步和工業技術的發展,在電子線路設計領域中,設計自動化工具已經逐步為設計者所接受,成為主要的設計手段。目前,VERILOG已成為許多設計自動化工具普遍采用的標準化硬件描述語言,掌握VERILOG語言,用VERILOG語言設計電子線路,是電子線路設計者必須掌握的基本技能。VERILOG支持數字電路的開發環境,VERILOG也支持各種設計方法:自頂向下、自底向上或混合的方法[1]。VERILOG語言功能性強,覆蓋面大,靈活性高,具有很好的實用性[2]。本文設計一個基于VERILOG的乒乓游戲機,乒乓游戲機是由5個發光二極管代表乒乓球臺,中間的發光二極管兼作球網,用點亮的發光二極管按一定方向移動來表示球的運動。在游戲機的兩側各設置兩個開關,甲乙二人按乒乓球比賽規則來操作開關。本設計由譯碼顯示器、記分器、狀態機/球臺控制器與按鍵去抖等部

遼寧科技學院本科生畢業設計(論文)第2頁

分組成。本設計是用實驗箱進行模擬乒乓機,用發光二極管代表乒乓球臺,最中間的發光二極管作球網,用點亮的發光二極管按一定方向移動來表示球的運動,用按鈕設置發球和接球開關。1.3本論文的主要內容

本論文的主要內容是設計一個基于FPGA的“乒乓球”游戲機,在廣泛收集相關資料的基礎上,對“乒乓球”游戲機進行了深入的研究,利用現場可編程門陣列FPGA完成本次設計。整個系統以ALtera公司的EP2C35芯片為核心,采用verilog HDL語言進行開發,配置了相應的輸入、信號處理及顯示電路,并進行仿真及驗證。

本論文各章的內容如下:

第一章介紹了“乒乓球”游戲機設計的背景及意義,并簡單的的闡述了目前國內外在這方面的發展現狀。

第二章介紹了Quartus II 軟件以及Modelsim軟件的使用和特點。第三章介紹了對于系統的整體設計以及相關的設計任務和設計要求,并簡單的分析了整個系統的設計流程和方法。

第四章主要是介紹在整個“乒乓球”游戲機系統中各個模塊的工作原理及過程。

第五章主要是對系統進行原理圖的設計和對整個系統的仿真。第六章主要是對整個的設計過程和仿真的的過程做一個簡單的描述。

遼寧科技學院本科生畢業設計(論文)第3頁 Quartus II與Modelsim 軟件簡介

2.1Quartus II 簡介

Quartus II 是Altera公司的綜合性PLD開發軟件,支持原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多種設計輸入形式,內嵌自有的綜合器以及仿真器,可以完成從設計輸入到硬件配置的完整PLD設計流程。

Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl腳本完成設計流程外,提供了完善的用戶圖形界面設計方式。具有運行速度快,界面統一,功能集中,易學易用等特點。

Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫,使用戶可以充分利用成熟的模塊,簡化了設計的復雜性、加快了設計速度。對第三方EDA工具的良好支持也使用戶可以在設計流程的各個階段使用熟悉的第三方EDA工具。

此外,Quartus II 通過和DSP Builder工具與Matlab/Simulink相結合,可以方便地實現各種DSP應用系統;支持Altera的片上可編程系統(SOPC)開發,集系統級設計、嵌入式軟件開發、可編程邏輯設計于一體,是一種綜合性的開發平臺。

Maxplus II 作為Altera的上一代PLD設計軟件,由于其出色的易用性而得到了廣泛的應用。目前Altera已經停止了對Maxplus II 的更新支持,Quartus II 與之相比不僅僅是支持器件類型的豐富和圖形界面的改變。Altera在Quartus II 中包含了許多諸如SignalTap II、Chip Editor和RTL Viewer的設計輔助工具,集成了SOPC和HardCopy設計流程,并且繼承了Maxplus II 友好的圖形界面及簡便的使用方法。

Altera Quartus II 作為一種可編程邏輯的設計環境, 由于其強大的設計能力和直觀易用的接口,越來越受到數字系統設計者的歡迎。

遼寧科技學院本科生畢業設計(論文)第4頁

2.2Modelsim簡介

Mentor公司的ModelSim是業界最優秀的HDL語言仿真軟件,它能提供友好的仿真環境,是業界唯一的單內核支持VHDL和Verilog混合仿真的仿真器。它采用直接優化的編譯技術、Tcl/Tk技術、和單一內核仿真技術,編譯仿真速度快,編譯的代碼與平臺無關,便于保護IP核,個性化的圖形界面和用戶接口,為用戶加快調錯提供強有力的手段,是FPGA/ASIC設計的首選仿真軟件。主要特點:

? RTL和門級優化,本地編譯結構,編譯仿真速度快,跨平臺跨版本仿真; ? 單內核VHDL和Verilog混合仿真; ? 源代碼模版和助手,項目管理;

? 集成了性能分析、波形比較、代碼覆蓋、數據流ChaseX、Signal Spy、虛擬對象Virtual Object、Memory窗口、Assertion窗口、源碼窗口顯示信號值、信號條件斷點等眾多調試功能;

? C和Tcl/Tk接口,C調試;

? 對SystemC的直接支持,和HDL任意混合 ? 支持SystemVerilog的設計功能;

? 對系統級描述語言的最全面支持,SystemVerilog, SystemC, PSL;? ASIC Sign off。

ModelSim分幾種不同的版本:SE、PE、LE和OEM,其中SE是最高級的版本,而集成在 Actel、Atmel、Altera、Xilinx以及Lattice等FPGA廠商設計工具中的均是其OEM版本。SE版和OEM版在功能和性能方面有較大差別,比如對于大家都關心的仿真速度問題,以Xilinx公司提供的OEM版本ModelSim XE為例,對于代碼少于40000行的設計,ModelSim SE 比ModelSim XE要快10倍;對于代碼超過40000行的設計,ModelSim SE要比ModelSim XE快近40倍。ModelSim

遼寧科技學院本科生畢業設計(論文)第5頁

SE支持PC、UNIX和LINUX混合平臺;提供全面完善以及高性能的驗證功能;全面支持業界廣泛的標準;Mentor Graphics公司提供業界最好的技術支持與服務。

遼寧科技學院本科生畢業設計(論文)第6頁 方案選擇與系統總體設計

3.1整體方案的選擇

本課題將采用Altera公司的EP2C35F484I8芯片進行基于FPGA的“乒乓球”游戲機設計。

3.1.1設計任務與要求

設計一個乒乓球游戲機,模擬乒乓球比賽基本過程和規則,并能自動裁判和計分。具體要求如下:

使用乒乓球游戲機的甲,乙雙方各在不同的位置發球或擊球。乒乓球的位置和移動方向可由LED顯示燈和一次點亮的方向決定,球的移動速度設為0.5s移動1位。使用者可按乒乓球的位置發出相應的動作,提前擊球或出界均判失分。

遼寧科技學院本科生畢業設計(論文)第7頁

3.1.2設計的原理和方法

乒乓球游戲機是用5個發光二極管代表乒乓球臺,中間發光二極管兼作乒乓球網,用點亮的發光二極管按一定的方向移動來表示球的運動。另外設置發球開關Af,Bf以及接球開關Aj,Bj。利用7段數碼管作為記分牌。

甲乙雙方按乒乓球比賽規則來操作開關。當甲方按動發球開關af時,靠近甲方的第一個燈亮,然后按順序向乙方移動;當球過網后,乙方可以接球,接球后燈反方向移動,雙方繼續比賽;如果一方提前擊球或未擊球,則判失分,對方加分。重新發球后繼續比賽。

本設計主要的設計方法是采用文本編輯法,利用verilog HDL語言描述乒乓球游戲機,并進行綜合和仿真。

圖3.1 系統設計流程圖

遼寧科技學院本科生畢業設計(論文)第8頁

3.1.3芯片的選擇

在這次設計中選用的FPGA芯片是Altera公司的Cyclone(颶風)系列的芯片,型號為:EP2C35。它是基于1.5V的,采用0.13um全銅SRAM工藝、TQFP封裝,有5980個邏輯單元,2個鎖相環,20個M4K RAM塊,其中每個RAM為4kbit,可以另加一位奇偶校驗位。

3.2系統總體設計

3.2.1乒乓游戲機的組成示意圖

圖3.2 乒乓球游戲機組成示意圖

本設計中的乒乓游戲機是由5個發光二極管代表乒乓球臺,中間的發光二極管兼作球網,用點亮的發光二極管按一定方向移動來表示球的運動。在游戲機的兩側各設置兩個開關,一個是發球開關af、bf;另一個是擊球開關aj、bj。甲乙二人按乒乓球比賽規則來操作開關。當甲方按動發球開關af時,靠近甲方的

遼寧科技學院本科生畢業設計(論文)第9頁

第一個發光二極管亮,然后發光二極管由甲向乙依次點亮,代表乒乓球的移動。當球過網后按設計者規定的球位,乙方就可以擊球。若乙方提前擊球或沒有擊中球,則判乙方失分,甲方的記分牌自動加一分。然后重新發球,比賽繼續進行。比賽一直要進行到一方記分牌達到21分,該局才結束。本設計由譯碼顯示器、按鍵去抖、狀態機/球臺控制器和記分器等部分所組成。3.2.2本系統的邏輯分框圖

圖3.2 系統邏輯分框圖

遼寧科技學院本科生畢業設計(論文)第10頁 系統各部分電路的詳細設計

4.1七段數碼管顯示譯碼電路

圖4.1 譯碼顯示電路符號

七段數碼是純組合電路,通常的小規模專用IC,如74或4000系列的器件只能作十進制BCD碼譯碼,然而數字系統中的數據處理和運算都是2進制的,所以輸出表達都是16進制的,為了滿足16進制數的譯碼顯示,最方便的方法就是利用VHDL譯碼程序在FPGA或CPLD中實現。七段數碼管分為共陰極和共陽極兩種[8]。簡而言之,對共陰極來說,公共引腳要接地,想要點亮某段數碼管,就在相應的引腳加上高電平;對共陰極來說剛好相反,公共引腳提高電平,想要點亮某段數碼管,就在相應的引腳加上低電平[9]。七段BCD碼譯碼器的設計,輸出信號LED7S的7位分別接如圖4所示數碼管的七個段,高位在左,低位在右[9]。例如當LED7S輸出為“1101101” 時,數碼管的7個段:g、f、e、d、c、b、a分別接1、1、0、1、1、0、1,接有高電平的段發亮,于是數碼管顯示“5”。

帶使能信號EN的譯碼電路的verilog程序中,EN為高電平時,譯碼器正常工作;EN為低電平時,譯碼器輸出0000000,表示數碼管無顯示。用選擇信號賦值語句描述,將綜合成組合邏輯電路。

遼寧科技學院本科生畢業設計(論文)第11頁

4.2按鍵去抖電路

圖4.2 按鍵電路符號

鍵盤的按鍵閉合與釋放瞬間,輸入的信號會有毛刺。如果不進行消抖處理,系統會將這些毛刺誤以為是用戶的另一次輸入,導致系統的誤操作。防抖電路有很多種,最簡單、最容易理解的就是計數法。其原理是對鍵值進行計數,當某一鍵值保持一段時間不改變時(計數器達到一定值后),才確認它為有效值;否則將其判為無效鍵值,重新對鍵值進行計算。

4.3狀態機設計

4.3.1狀態機的6種狀態及狀態轉移

本狀態機有6種狀態,分別是WAITSTATE、ATOB、BTOA、ASCORE、BSCORE和FINALRESULT,其含義如下表所示:

遼寧科技學院本科生畢業設計(論文)第12頁

狀態機的6種狀態及含義:

表4.1 狀態機6種狀態表

狀 態 含 義

WAITSTATE 等待狀態,等待A或B方開球

ATOB 球從A向B方移動

BTOA 球從B向A方移動

ASCORE A得一分

BSCORE B得一分

FINALRESULT 比賽結束(最終判分),在此狀態下需要按復位鍵,才能開始下一輪比賽

結合上表從下圖中很清楚地看出乒乓游戲機比賽過程中球的移動情況,及加分方法,還可以初步了解到本狀態機設計的基本思路:

圖4.3 乒乓游戲機狀態轉移圖

遼寧科技學院本科生畢業設計(論文)第13頁

4.3.2狀態機/球臺控制電路

狀態機是種很重要的時序電路,也是本設計的核心部件。狀態機屬于時序電路范疇,實現一個控制功能更為方便,并提高了控制速度。本次設計中狀態機的符號如下圖所示:

圖4.4 狀態機、球臺控制電路符號

在本設計中,狀態機用兩個信號表示狀態:STATE表示當前狀態,TABLESTATE表示下一個狀態。此狀態機由兩個進程構成,狀態機的輸入/輸出引腳的作用如下表所示。其中SCOREAL[3..0]、SCOREAH[3..0]、SCOREBL[3..0]、SCOREBH[3..0]用七段BCD碼譯碼器顯示得分情況,而SCOREA、SCOREB用二進制進行加分,由記分器反饋回來。

遼寧科技學院本科生畢業設計(論文)第14頁

輸入/輸出引腳的作用:

表4.2 輸入輸出引腳表

引 腳 作 用

CLK

所需時鐘可由系統時鐘分頻得到。此時時鐘決定了球移動的速度,可根據實際需要調整。

RESET 復位鍵,比賽重新開始,記分器清0 af、bf A和B雙方的開始的開球鍵

aj,bj

A和B雙方的擊球鍵(可以將其與開球鍵合并)CLEAR 將記分器清0(給記分器的控制信號)INCREASEA、INCREASEB 分別為A、B雙方的加分信號(給記分器的控制信號)SCOREAL[3..0]SCOREAH[3..0] SCOREBL[3..0]SCOREBH[3..0] SCOREA、SCOREB

A、B雙方的分數(由記分器給出)

LIGHT[4..0] 接5個發光二極管

AWIN、BWIN 分別接發光二極管,表示A或B方勝出

遼寧科技學院本科生畢業設計(論文)第15頁

4.4記分器設計

圖4.5 計分器電路符號

記分器元件符號如上圖所示,本設計中記分器比較簡單,只須根據狀態機給出的兩個信號(INCREASEA和INCREASEB)對六個分數(SCOREAL、SCOREAH和SCOREBL、SCOREBH、SCOREA、SCOREB)進行操作。

遼寧科技學院本科生畢業設計(論文)第16頁 系統的整體綜合與仿真

5.1頂層文件設計

“乒乓球”游戲機系統主要由譯碼電路,按鍵去抖電路,狀態機/球臺控制電路等構成,下圖為系統的頂層文件設計原理圖:

圖5.1 頂層文件設計原理圖

遼寧科技學院本科生畢業設計(論文)第17頁

5.2系統程序框圖:

系統的程序框圖如下圖所示,程序清單見附錄:

clk1khzClk1_2hzClk1_2hz上升沿Rst=1NY重置初值判斷a,b,af,aj,bf,bj的值球的位置狀態shift_1A,B接發球情況A方得分a_scoreB方得分b_scoreA方得分的各位十位a_one,a_tenB方得分的各位十位b_one,b_ten譯碼顯示譯碼顯示 圖5.2 系統程序框圖

遼寧科技學院本科生畢業設計(論文)第18頁

5.3整個系統的綜合與仿真

5.3.1 電路符號

乒乓球游戲機的電路符號如下圖所示。輸入信號:系統時鐘clk1khz(輸入1KHZ的時鐘信號);系統復位端rst;甲方發球af;乙方發球bf;甲方擊球aj;乙方擊球bj;輸出信號:5個LED顯示模塊shift[4?0];數碼管地址選擇信號scan[3?0];7段顯示控制信號seg7[6..0]。

圖5.3 系統電路符號

5.3.2 系統仿真

由于本系統的狀態情況比較的多,下面就幾種典型的情況進行系統的綜合和仿真:

1、甲方發球后乙方提前擊球,同時甲方得分:下圖為仿真的結果圖,觀察波形可知,球的移動方向為從左到右,乙提前擊球后a_core加1,即甲方得分。

圖5.4 仿真結果圖

遼寧科技學院本科生畢業設計(論文)第19頁

2、甲方發球后,乙方在過網后擊球:此情況的功能仿真結果如下圖所示,觀察波形可知,乙接到球后,球的運動方向變為從右到左。

圖5.5 仿真結果圖

3、甲方發球后,乙方沒有擊球:此情況的功能仿真結果圖如下圖所示,觀察波形可知,乙沒有接球,則甲方加分。

圖5.6 仿真結果圖

遼寧科技學院本科生畢業設計(論文)第20頁 系統的運行與仿真過程

6.1系統程序的編譯

1、運行新建項目向導,新建一個項目,選擇之前創建好的文件夾,用來存放該項目的文件,如圖6.1所示:

2、該步驟主要是為以后的仿真做準備,如圖6.2所示選擇仿真軟件為modelsim,編程語言為verilog HDL。

遼寧科技學院本科生畢業設計(論文)第21頁

3、創建完項目之后接著再新建一個verilog HDL file 用來編輯之前設計好的程序,再編輯區輸入設計好的程序之后,點擊編譯按鈕開始編譯文件,通過不斷的調試修改直到編譯成功為止,如圖6.3所示:

遼寧科技學院本科生畢業設計(論文)第22頁

6.2 系統的仿真

1、點擊進入仿真軟件modelsim之后,點擊如圖6.4所示的按鈕,找到之前準備好的文件,開始編譯,觀察信息區,直到編譯成功為止。

2、在work庫中找到編譯成功的文件zhouyou,雙擊準備開始仿真,如圖6.5所示:

遼寧科技學院本科生畢業設計(論文)第23頁

3、如圖6.6所示開始給定各個變量的初始值,以及所需的時鐘信號 根據自己的需要和仿真的方便性考慮時鐘的大小.4、給定完時鐘信號和各個變量的初始值之后,開始點擊進入仿真界面,運行開始仿真,具體的步驟如圖6.7所示:

遼寧科技學院本科生畢業設計(論文)第24頁

結論

本文進行乒乓游戲機軟件設計,并用EDA實驗箱進行驗證,目標芯片是Altera公司CycloneII系列的EP2C35F484I8,本設計由狀態機/球臺控制器、記分器、譯碼顯示器、按鍵去抖等模塊組成。通過實驗箱模擬乒乓球游戲機,用發光二極管代表乒乓球臺,最中間的發光二極管作球網,用點亮的發光二極管按一定方向移動來表示球的運動,用按鈕設置發球和接球開關。最終實現乒乓機能模擬乒乓球比賽的基本過程和規則,并能自動裁判和記分。本設計用了16個發光二極管當乒乓球臺。本設計可以再改進一下,把指示勝利2個發光二極管用數碼管來代替,這樣不僅可以完成之前的功能,而且可以顯示比賽的局數。

通過幾個月的努力,基本完成了畢業設計任務書所要求的內容,而且在實驗箱上對大部分功能進行了仿真,取得了預期的結果,總之,通過自己的努力以及同學和老師的幫助,圓滿的完成了本次設計任務。

遼寧科技學院本科生畢業設計(論文)第25頁

謝 辭

通過兩個多月的畢業設計,我學習了怎樣運用FPGA設計乒乓球游戲機系統。非常感謝我的指導老師孫禾,在整個設計過程中一直耐心教導,認真負責,細心教誨,讓我領略到如何實現一個系統的設計,以及如何使用書本知識到實際應用上去。在很多細節上,孫老師的指導與教誨,讓人受益匪淺。

感謝四年來測控技術與儀器專業各位老師的孜孜教誨和學校的細心培養,讓我能有今天的進步,在今后的工作中發揮自己的價值。

最后要感謝我身后的父親,母親,一直以來對我的信任和支持,有朝一日,希望可以回給他們同樣的愛。

感謝遼寧科技學院四年的學習!

遼寧科技學院本科生畢業設計(論文)第26頁

參考文獻

[1] 邊計年.用VHDL設計電子線路[M].北京:清華出版社,2000:2.[2] 黃任.VHDL入門?解惑?經典實例?經驗總結[M].北京:北京航天大學出版社,2005:3-5,115.[3] 尹常永.EDA技術/電子設計實驗講義[M].西安:西安電子科技大學出版社,2004:3.[4] 楊剛.現代電子技術—VHDL與數字系統設計[M].北京:電子工業出版社,2004:6.[5] 甘歷.VHDL應用與開發實驗[M].北京:科學出版社,2003:4.[6] 侯伯亨.VHDL硬件描述語言與數字邏輯電路設計[M].西安:西安電子科技大學出版社,1999:27.[7] 潭會生,張昌凡.EDA技術及應用[M].西安:西安電子科技大學出版社,2004:81,233,256.[8] 王振紅.VHDL數字電路設計與應用實踐教程[M].北京:機械工業出版社,2005:35,37.[9] 李宜達.數字邏輯電路設計與實現[M].北京:科學出版社,2004:144.遼寧科技學院本科生畢業設計(論文)第27頁

附錄

1、系統程序:

module zhouyou(shift,scan,seg7,clk1khz,rst,af,aj,bf,bj);output[4:0] shift;output[3:0] scan;output[6:0] seg7;input clk1khz;input af;input aj;input bf;input bj;input rst;reg[4:0] shift;reg[3:0] scan;reg[6:0] seg7;reg clk1_2hz;reg[3:0] a_score,b_score;reg[1:0] cnt;reg[3:0] data;reg[3:0] a_one,a_ten,b_one,b_ten;reg[7:0] count;reg a,b;

遼寧科技學院本科生畢業設計(論文)第28頁

reg[4:0] shift_1;

always@(posedge clk1khz)begin if(count=='b1111_1010)begin clk1_2hz<=~clk1_2hz;count<=0;end else begin count<=count+1;end

if(cnt=='b11)begin cnt<='b00;end else begin cnt<=cnt+1;end end

always@(posedge clk1khz)begin if(rst)begin a_score<=0;b_score<=0;a<=0;b<=0;shift_1<=0;end else begin

遼寧科技學院本科生畢業設計(論文)第29頁

if(!a&&!b&&af)begin a<=1;shift_1<='b10000;end else if(!a&&!b&&bf)begin b<=1;shift_1<='b00001;end else if(a&&!b)begin if(shift_1>'b00100)begin if(bj)begin a_score<=a_score+1;a<=0;b<=0;shift_1<='b00000;end else begin shift_1[4:1]<=shift_1[4:1]>>1;end end else if(shift_1=='b0)begin a_score<=a_score+1;a<=0;b<=0;end else begin if(bj)begin a<=0;b<=1;end

遼寧科技學院本科生畢業設計(論文)第30頁

else begin shift_1[4:1]<=shift_1[4:1]>>1;end end end else if(b&&!a)begin if(shift_1<'b00100&&shift_1!='b0)begin if(aj)begin b_score<=b_score+1;a<=0;b<=0;shift_1<='b00000;end else begin shift_1[3:0]<=shift_1[3:0]<<1;end end else if(shift_1=='b0)begin b_score<=b_score+1;a<=0;b<=0;end else begin if(aj)

遼寧科技學院本科生畢業設計(論文)第31頁

begin a<=1;b<=0;end else begin shift_1[3:0]<=shift_1[3:0]<<1;end end end end shift<=shift_1;if(a_score=='b1011&&!rst)begin a_score<=a_score;b_score<=b_score;end if(b_score=='b1011&&!rst)begin a_score<=a_score;b_score<=b_score;end end always@(posedge clk1khz)begin case(a_score[3:0])'b0000:begin a_one<='b0000;a_ten<='b0000;end 'b0001:begin a_one<='b0001;a_ten<='b0000;end 'b0010:begin a_one<='b0010;a_ten<='b0000;end 'b0011:begin a_one<='b0011;a_ten<='b0000;end 'b0100:begin a_one<='b0100;a_ten<='b0000;end 'b0101:begin a_one<='b0101;a_ten<='b0000;end 'b0110:begin a_one<='b0110;a_ten<='b0000;end

遼寧科技學院本科生畢業設計(論文)第32頁

'b0111:begin a_one<='b0111;a_ten<='b0000;end 'b1000:begin a_one<='b1000;a_ten<='b0000;end 'b1001:begin a_one<='b1001;a_ten<='b0000;end 'b1010:begin a_one<='b0000;a_ten<='b0001;end 'b0011:begin a_one<='b0001;a_ten<='b0001;end default:begin a_one<='bx;a_ten<='bx;end endcase

case(b_score[3:0])'b0000:begin b_one<='b0000;b_ten<='b0000;end 'b0001:begin b_one<='b0001;b_ten<='b0000;end 'b0010:begin b_one<='b0010;b_ten<='b0000;end 'b0011:begin b_one<='b0011;b_ten<='b0000;end 'b0100:begin b_one<='b0100;b_ten<='b0000;end 'b0101:begin b_one<='b0101;b_ten<='b0000;end 'b0110:begin b_one<='b0110;b_ten<='b0000;end 'b0111:begin b_one<='b0111;b_ten<='b0000;end 'b1000:begin b_one<='b1000;b_ten<='b0000;end 'b1001:begin b_one<='b1001;b_ten<='b0000;end 'b1010:begin b_one<='b0000;b_ten<='b0001;end 'b0011:begin b_one<='b0001;b_ten<='b0001;end default:begin b_one<='bx;b_ten<='bx;end

遼寧科技學院本科生畢業設計(論文)第33頁

endcase

case(cnt[1:0])'b00:begin data<=b_one;scan<='b0001;end 'b01:begin data<=b_ten;scan<='b0010;end 'b10:begin data<=a_one;scan<='b0100;end 'b11:begin data<=a_ten;scan<='b1000;end default:begin data<='bx;scan<='bx;end endcase

case(data[3:0])'b0000: seg7[6:0]=7'b1111110;'b0001: seg7[6:0]=7'b0110000;'b0010: seg7[6:0]=7'b1101101;'b0011: seg7[6:0]=7'b1111001;'b0100: seg7[6:0]=7'b0110011;'b0101: seg7[6:0]=7'b1011011;'b0110: seg7[6:0]=7'b1011111;'b0111: seg7[6:0]=7'b1110000;'b1000: seg7[6:0]=7'b1111111;'b1001: seg7[6:0]=7'b1111011;

遼寧科技學院本科生畢業設計(論文)第34頁

default: seg7[6:0]='bx;endcase end

endmodule

第五篇:基于FPGA模數轉換控制器的設計

EDA課程設計任務書

1、設計題目:基于FPGA模數轉換控制器的設計

2、設計目的:

(1)熟悉掌握VHDL語言設計基本知識,熟練運用QuartusⅡ軟件對各單元電路進行軟件模擬、仿真;

(2)學習用狀態機對A/D轉換器ADC0809的采樣控制電路的實現,使設計能夠實現8路數據的采集;

(3)通過本次課程設計的學習,復習所學的專業知識,使課堂學習的理論知識應用于實踐,通過本次課程設計的實踐提高我們的實踐操作能力、提高分析問題和解決問題的能力。

3、設計要求:

(1)給出模數轉換采樣控制電路的方案設計,利用QuartusⅡ軟件進行軟件模擬、仿真;要求能夠實現8路數據的采集。分析A/D轉換原理及時序、建立項目的實施方案,并畫出控制狀態圖;

(2)認真完成設計后,提交課程設計報告:給出控制器的方案設計,包括綜合設計概況、主要技術指標、相應模塊的實現方法;模塊的電路原理圖;所采用的器件資料,等等。報告格式參照中原工學院畢業設計指導手冊。

4、設計內容:利用QuartusⅡ軟件對本次設計(模數轉換采樣控制電路)進行文本編輯輸入和仿真測試;給出仿真波形;最后進行引腳鎖定并進行測試,硬件驗證編程電路對ADC0809的控制功能。

中原工學院畢業設計報告紙

目錄

一、概述………………………………………………………(4)

二、設計內容…………………………………………………(5)

? ? ? ?

? ? ? ? ? 2.2

設計流程

2.2.1 建立工程文件夾和編輯設計文件 2.2.2 編譯前設置 2.2.3 全程編譯 2.2.4 時序仿真 2.1

設計原理

2.1.1 ADC0809引腳圖及功能介紹

2.1.2 用狀態機對ADC0809的采樣控制電路的實現 2.1.3 對ADC0809的控制功能的電路描述的程序

三、心得體會…………………………………………………(12)

中原工學院畢業設計報告紙

一.概述

隨著現代芯片工藝的改進,FPGA的等效系統門達到到幾百萬門,而且工作頻率也隨之提高。FPGA也就大量的在電子產品中出現,得到了廣泛的應用。芯片設計的工藝的改進,45nm工藝的出現,使得FPGA成為必不可少的流行的實惠的器件。FPGA 最大的特點就是靈活,實現你想實現的任何數字電路,可以定制各種電路。減少受制于專用芯片的束縛。真正為自己的產品量身定做。在設計的過程中可以靈活的更改設計。而且它強大的邏輯資源和寄存器資源可以讓你輕松的去發揮設計理念,其并行執行,硬件實現的方式可以應對設計中大量的高速電子線路設計需求。FPGA比DSP擁有更快的速度,可以實現非常復雜的高速邏輯,FPGA比ASIC(專用芯片)有更短的設計周期和靈活性,免去昂貴的開版費用,而且可以隨時裁減,增加你想要的功能達到規避設計風險,回避芯片廠商的限制。另外知識產權的概念不斷涌現,仿制別人抄襲,FPGA完全讓設計的智慧得以保護。讓公司的利益在較長時間內得到保證。隨FPGA芯片供應商的重視和第三方公司的重視,現在有非常現成的IP核被提供,進一步縮短設計周期縮短,減小開發成本。

FPGA具有可編程邏輯器件現場可編程的靈活性,又具有門陳列器件功能強、高集成度和高速度的優點,因此在要求功能越來越強,體積越來越小,功耗越來越低的現代通信系統設計中被越來越廣泛的應用。隨著超大規模集成電路的發展,尤其是微電子技術和計算機技術的迅猛發展和廣泛應用,數字化成為目前通信技術發展的趨勢,它具有可靠性高,靈活性強,易大規模集成等優點,日益受到重視。目前,數字化的手段主要有專用集成電路(ASIC)和通用數字信號處理器(DSP)。專用集成電路優點是處理速度快,缺點是靈活性差。DSP能完成十分復雜的算法,使用靈活,易實現模塊化,缺點是受處理器速度的限制。FPGA提供了實現數字信號處理的第三種解決方案,它結合了ASIC和DSP兩種方式的優勢,既具有很高的處理速度,又具有一定的靈活性。大規??删幊踢壿嬈骷﨔PGA因其成本低,靜態可重復編程和動態在系統重構等優點,已成為目前應用最為廣泛的可編程專用集成電路。

Quartus II 是Altera的綜合性PLD開發軟件,支持原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多種設計輸入形式,內嵌自有的綜合器以及仿真器,可以完成從設計輸入到硬件配置的完整PLD設計流程。Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl腳本完成設計流程外,提供了完善的用戶圖形界面設計方式。具有運行速度快,界面統一,功能集中,易學易用等特點。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模塊庫,使用戶可以充分利用成熟的模塊,簡化了設計的復雜性、加快了設計速度。對第三方EDA工具的良好支持也使用戶可

中原工學院畢業設計報告紙

以在設計流程的各個階段使用熟悉的第三方EDA工具.此外,Quartus II 通過和DSP Builder工具與Matlab/Simulink相結合,可以方便地實現各種DSP應用系統;支持Altera的片上可編程系統(SOPC)開發,集系統級設計、嵌入式軟件開發、可編程邏輯設計于一體,是一種綜合性的開發平臺。Maxplus II 作為Altera的上一代PLD設計軟件,由于其出色的易用性而得到了廣泛的應用。目前Altera已經停止了對Maxplus II 的更新支持,Quartus II 與之相比不僅僅是支持器件類型的豐富和圖形界面的改變。Altera在Quartus II 中包含了許多諸如SignalTap II、Chip Editor和RTL Viewer的設計輔助工具,集成了SOPC和HardCopy設計流程,并且繼承了Maxplus II 友好的圖形界面及簡便的使用方法。Altera Quartus II 作為一種可編程邏輯的設計環境, 由于其強大的設計能力和直觀易用的接口,越來越受到數字系統設計者的歡迎。

本次設計以FPGA芯片ADC0809為核心利用VHDL語言設計來實現模數轉換采樣控制電路。其頂層采用原理圖設計方式,各模塊采用VHDL語言設計,完成了對模數轉換采樣控制電路的軟件仿真和硬件電路設計。FPGA設計人體分為系統規范、設計輸入、綜合、功能仿真(前仿真)、實現、時序仿真(后仿真)、配置下載等六個步驟整個系統是在QuartusⅡ環境下,利用VHDL語言實現的,在Ⅱ環境下經系統仿真實現模數轉換采樣控制系統。

二.設計內容

2.1 設計原理

2.1.1 ADC0809引腳圖及功能介紹

ADC0809是CMOS的8位A/D轉換器,片內有8路模擬開關,可控制8個模擬量中的一個進入轉換器中。轉換時間約100μs,含鎖存控制的8路多路開關,輸出有三態緩沖器控制,單5V電源供電。

中原工學院畢業設計報告紙

圖1 ADC0809的引腳圖

圖2 ADC0809工作時序圖

上圖1和圖2分別是ADC0809的引腳圖、A/D轉換時序,下圖3為其采樣控制狀態圖。時序圖中,START為轉換啟動控制信號,上升沿有效;一旦START有效后,狀態信號EOC即變為低電平,表示進入轉換狀態,轉換時間約100微秒。轉換結束后,EOC將變為高電平。此后外部控制可以使OE由低電平變為高電平(輸出有效),此時,0809的輸出數據總線D[7..0]從原來的高阻態變為輸出數據有效。由狀態圖也可以看到,在狀態st2中需要對0809工作狀態信號EOC進行測試,如果為低電平,表示轉換沒有結束,仍需要停留在st2狀態中等待,直到變成高電平后才說明轉換結束,在下一時鐘脈沖到來時轉向狀態st3.在狀態st3,由狀態機向0809發出轉換好的8位數據輸出允許命令,這一狀態周期同時可作為數據輸出穩定周期,以便能在下一狀態中向鎖存器中鎖入可靠的數據。在狀態st4,由狀態機向FPGA中的鎖存器發出鎖存信號(LOCK的上升沿),將0809輸出的數據進行鎖存。

中原工學院畢業設計報告紙

圖3 控制ADC0809采樣狀態圖

2.1.2用狀態機對ADC0809的采樣控制電路的實現

Quartus II 是Altera的綜合性PLD開發軟件,支持原理圖、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多種設計輸入形式,內嵌自有的綜合器以及仿真器,可以完成從設計輸入到硬件配置的完整PLD設計流程。利用QuartusⅡ對電路進行文本編輯輸入和仿真測試;給出仿真波形。最后進行引腳鎖定并進行測試,硬件驗證電路對ADC0809的控制功能。本次設計描述的狀態機屬于Moore機,由二個主控進程構成,外加一個輔助進程,即鎖存器進程LATCH1,各進程分工明確。狀態及結構框圖1如下所示:

中原工學院畢業設計報告紙

圖4

采樣狀態機結構框圖

在一個完整的采樣周期中,狀態機中最先被啟動的是以CLK為敏感信號的時序進程,接著組合進程COM被啟動,因為他們以信號current_state為敏感信號。最后被啟動的是鎖存器進程,它是在狀態機進入狀態st4后才被啟動的,即此時LOCK產生了一個上升沿信號,從而啟動進程LATCH1,將0809在本采樣周期輸出的8位數據鎖存到寄存器中,以便外部電路能從Q端讀到穩定正確的數據。

2.1.3 對ADC0809的控制功能的電路描述程序如下:

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ADCINT IS PORT(D : IN STD_LOGIC_VECTOR(7 DOWNTO 0);CLK : IN STD_LOGIC;

EOC : IN STD_LOGIC;

ALE : OUT STD_LOGIC;

START : OUT STD_LOGIC;

OE : OUT STD_LOGIC;

ADDA : OUT STD_LOGIC;

中原工學院畢業設計報告紙

LOCK0 : OUT STD_LOGIC;

Q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END ADCINT;ARCHITECTURE behav OF ADCINT IS TYPE states IS(st0, st1, st2, st3,st4);

SIGNAL current_state, next_state: states :=st0;

SIGNAL REGL

: STD_LOGIC_VECTOR(7 DOWNTO 0);

SIGNAL LOCK

: STD_LOGIC;

BEGIN ADDA <= '1';

Q <= REGL;LOCK0 <= LOCK;

COM: PROCESS(current_state,EOC)BEGIN

CASE current_state IS

WHEN st0=>ALE<='0';START<='0';LOCK<='0';OE<='0';

next_state <= st1;

-WHEN st1=>ALE<='1';START<='1';LOCK<='0';OE<='0';next_state <= st2;--啟動采樣

WHEN st2=> ALE<='0';START<='0';LOCK<='0';OE<='0';

IF(EOC='1')THEN next_state <= st3;

ELSE next_state <= st2;END IF;

WHEN st3=> ALE<='0';START<='0';LOCK<='0';OE<='1';next_state <= st4;

WHEN st4=> ALE<='0';START<='0';LOCK<='1';OE<='1';next_state <= st0;

WHEN OTHERS => next_state <= st0;

END CASE;END PROCESS COM;

REG: PROCESS(CLK)

BEGIN

IF(CLK'EVENT AND CLK='1')THEN current_state<=next_state;END IF;

END PROCESS REG;

LATCH1: PROCESS(LOCK)

BEGIN

IF LOCK='1' AND LOCK'EVENT THEN

REGL <= D;END IF;

END PROCESS LATCH1;

END behav;

中原工學院畢業設計報告紙

2.2 設計流程

2.2.1 建立工程文件夾和編輯設計文件

(1)新建文件夾ADCINT(2)輸入源程序。打開QuartusⅡ,選擇File→New,在New窗口中的Device Design Files中選擇編譯文件的語言類型為VHDL File,輸入2.1.3中的程序。

(3)文件存盤。File→Save As命令,注意存盤文件名應與實體名一致。當出現下圖5時,就直接單擊“是”按鈕,則直接創建工程。

2.2.2 2.2.3 編譯前設置 全程編譯

選擇Processing菜單的Start Compilation項,啟動全程編譯。

中原工學院畢業設計報告紙

2.2.4 時序仿真

(1)打開波形編譯器。

中原工學院畢業設計報告紙

(2)設計仿真時間區域。(3)波形文件存盤。

(4)將工程ADCINT的端口名選入波形編輯器中。選擇View菜單中的Utility Windows項的Node Finder選項。

中原工學院畢業設計報告紙

(5)編輯輸入波形(輸入激勵信號)。(6)總線數據格式設計,仿真參數設計。(7)啟動仿真器,觀察仿真結果如下:

中原工學院畢業設計報告紙

三.心得體會

下載基于FPGA的交通紅綠燈控制器word格式文檔
下載基于FPGA的交通紅綠燈控制器.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


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

相關范文推薦

    基于FPGA的彩燈控制器設計(5篇)

    《EDA原理及應用》 課程設計報告 課題名稱: 基于數碼管顯示的彩燈控制器 院 系: 機電工程學院專 業: 電子信息工程學生姓名: 陳納爽 學生學號: 201033285123 彩燈及數碼管顯示......

    《交通紅綠燈》教學設計

    《交通紅綠燈》教學設計 八一中心小學 陳燕 一、教學目標 1、認知目標:學會簡單flash逐幀動畫制作的方法。 2、過程與方法:任務驅動法與小組合作動手探究相結合。 3、情感目......

    “交通紅綠燈”教學反思

    “交通紅綠燈”教學反思 這節課,是我精心設計的一節綜合實踐課。五年級學生的綜合實踐課信息技術部分知識,還停留在初步認識Windows上,我校學生早已經學習過了。如果按照教材去......

    基于FPGA的(帶有緊急情況處理的)交通燈控制器的設計.

    學號成績 評語 《現代數字系統設計》課程論文 題目基于FPGA的(帶有緊急情況處理的交通燈控制器的設計 作者班級 院別信息與通信工程專業電子信息工程完成時間 2011年5月12日......

    交通信號燈,交通紅綠燈安全常識

    交通信號燈、交通紅綠燈安全常識 《中華人民共和國道路交通安全法實施條例 》的相關規定: 第二十九條 交通信號燈分為:機動車信號燈、非機動車信號燈、人行橫道信號燈、車道信......

    FPGA常用術語

    標題:FPGA常用術語 2010-05-13 11:16:29 FPGA常用術語1:LCA(Logic Cell Array):邏輯單元陣列,內部包括可配置邏輯模塊CLB(Configurable Logic Block)、輸出輸入模塊IOB(Input Ou......

    如何學習fpga

    如何學習FPGA關鍵詞:工作人員, 硬件, 設計, FPGA 掌握FPGA可以找到一份很好的工作,對于有經驗的工作人員,使用FPGA可以讓設計變得非常有靈活性。掌握了FPGA設計,單板硬件設計就......

    FPGA學習心得

    回想起自己學FPGA,已經有一段時間了,從開始的茫然,到后來的瘋狂看書,設計開發板,調電路,練習各種FPGA實例,到最后能獨立完成項目,一路走來,感受頗多,拿出來和大家分享,順便介紹下自己的......

主站蜘蛛池模板: 久久天天躁狠狠躁夜夜躁2014| 欧美日产成人高清视频| 久久久精品欧美一区二区免费| 欧美日韩免费做爰大片人| 成人无码小视频在线观看| 欧美人伦禁忌dvd放荡欲情| 国产精品亚洲第一区焦香味| 欧美疯狂做受xxxx| 最新欧美精品一区二区三区| 亚洲国产另类久久久精品黑人| 国产午夜片无码区在线观看| 国产欧美另类精品久久久| 精品久久伊人99热超碰| 久久久久久一区国产精品| 色播在线精品一区二区三区四区| 国产精品一国产精品一k频道| 国产亚洲香蕉线播放αv38| 国产女合集小岁9三部| 免费无码的av片在线观看| 无码国产午夜福利片在线观看| 久久99久国产麻精品66| 国产女人被狂躁到高潮小说| 色综合热无码热国产| 一区二区三区国产亚洲网站| 国产欧美日韩一区二区三区在线| 亚洲国产美国国产综合一区| 欧美饥渴熟妇高潮喷水水| 中文字幕亚洲日韩无线码| 欧美日产国产精品日产| 亚洲情a成黄在线观看| 精品区2区3区4区产品乱码9| 影音先锋熟女少妇av资源| 十八禁无码免费网站| 国产精品视频一区二区噜噜| 亚洲精品国产品国语在线观看| 啪啪无码人妻丰满熟妇| 乱子伦一区二区三区| 人人模人人爽人人喊久久| 一本久道综合在线中文无码| 99e热久久免费精品首页| 久久96热在精品国产高清|