【文章內(nèi)容簡介】
用flashamp。clk實(shí)現(xiàn)的.既然采用的是自頂向下的設(shè)計(jì)思想,那么頂層的設(shè)計(jì)就很重用,頂層設(shè)計(jì)好后,下面各個(gè)部分寫起來就比較容易了,一旦出了什么問題也好檢查錯(cuò)誤在哪里進(jìn)行相應(yīng)的改動(dòng)。 設(shè)計(jì)過程: 完成真?zhèn)€交通燈的設(shè)計(jì)主要經(jīng)過了電路的分析,模塊劃分,程序的編譯,模塊的建立,波形的仿真,和最后模塊的整合這幾個(gè)步驟: 在設(shè)計(jì)中我主要負(fù)責(zé)計(jì)時(shí)模塊和頂層模塊的建立,所以本文只對(duì)此進(jìn)行詳細(xì)敘述,對(duì)另兩個(gè)模塊就不做詳解。(Enable鍵控制計(jì)時(shí)器的運(yùn)行和關(guān)閉。Enable按下后,將置數(shù)值賦給計(jì)數(shù)變量chief_h_temp,chief_l_temp,sub_h_temp,sub_l_temp.)根據(jù)設(shè)計(jì)要求先將整個(gè)電路的輸入輸出規(guī)劃出來。其中輸入:一個(gè)運(yùn)行控制鍵enable(按下后可以使交通燈運(yùn)行,再按下后交通燈停止運(yùn)行。)一個(gè)時(shí)鐘信號(hào)CLK,四個(gè)功能按鍵分別控制主干道高低位鍵,支干道高低位鍵。(chief_h_button,chief_l_button,sub_h_button,sub_l_button)。輸出:chief_green,chief_red,sub_green,sub_red(分別控制發(fā)光管)。并且設(shè)置輸出chief_h,chief_l,sub_h,sub_l可以控制數(shù)碼管顯示。初步對(duì)電路分析后建立了一個(gè)系統(tǒng)的框架。如圖9所式:而模塊的劃分是設(shè)計(jì)中要求的所以不必再做敘述。、yesyes綠燈閃爍紅燈保持綠燈閃爍紅燈保持yes調(diào)節(jié)信號(hào)使能nonoyesyesnoyes計(jì)時(shí)到Ty是否綠燈5S內(nèi)東西為綠,南北為紅計(jì)時(shí)到TX是否綠燈5S內(nèi)東西為紅,南北為綠,計(jì)時(shí)開始復(fù)位通電nonono圖37系統(tǒng)框圖 計(jì)時(shí)模塊(1)程序的編譯我主要負(fù)責(zé)的是計(jì)時(shí)控制模塊的編譯,首先我們確定的是用文本輸入的方法來實(shí)現(xiàn)。在程序中完成了計(jì)時(shí)功能同時(shí)也完成了控制的功能:初始狀態(tài),計(jì)數(shù)選擇寄存器select=0,對(duì)主干道的計(jì)數(shù)變量進(jìn)行減計(jì)數(shù)。每到一個(gè)時(shí)鐘上升沿,對(duì)變量減1。建立一個(gè)文件夾并再在其中建立個(gè)名為jishi的文件夾,與程序同名,為以后整合時(shí)調(diào)用模塊做依據(jù)。然后點(diǎn)擊file中的new選擇text editor file。根據(jù)以上的要求編譯計(jì)時(shí)程序如下Modulejishi(start,Initial,clk,chief_h,chief_l,sub_h,sub_l,enable,select,flash,chief_h_temp,chief_l_temp,sub_h_temp,sub_l_temp)input start,enable。input clk。input chief_h,chief_l。input sub_h,sub_l 。input Initial。output select,flash。output chief_l_temp, chief_h_temp。output sub_l_temp,sub_h_temp。always @(posedge enable)begin start=~start。endalways @(posedge clk)beginif(start)beginif(!Initial)begin chief_l_temp=chief_l。 chief_h_temp=chief_h。 sub_l_temp=sub_l。 sub_h_temp=sub_h。 Initial=1。 end else begin if(!select) begin if((chief_l_temp==0)amp。amp。(chief_h_temp=1)) begin chief_h_temp=chief_h_temp1。 chief_l_temp=9。 end if((chief_l_temp=1)amp。amp。(chief_l_temp=9)) begin if((chief_h_temp==0)amp。amp。(chief_l_temp==5)) begin flash=1。chief_l_temp=chief_l_temp1。 end else chief_l_temp=chief_l_temp1。 end else if((chief_h_temp==0)amp。amp。(chief_l_temp==0))begin select=1。flash=0。end end else if(select) begin if((sub_l_temp==0)amp。amp。(sub_h_temp=1)) begin sub_h_temp=sub_h_temp1。 sub_l_temp=9。 end if((sub_l_temp=1)amp。amp。(sub_l_temp=9)) begin if((sub_h_temp==0)amp。amp。(sub_l_temp==5)) begin flash=1。sub_l_temp=sub_l_temp1。end else sub_l_temp=sub_l_temp1。 end else if((sub_h_temp==0)amp。amp。(sub_l_temp==0)) begin select=0。flash=0。 chief_l_temp=chief_l。 chief_h_temp=chief_h。 sub_l_temp=sub_l。 sub_h_temp=sub_h。 end end end end else begin chief_l_temp=0。 chief_h_temp=0。 sub_l_temp=0。 sub_h_temp=0。 endendendmodule說明:當(dāng)k1鍵按下,Enable為高點(diǎn)平時(shí),定時(shí)器開始運(yùn)行,否則定時(shí)器關(guān)閉。clk上升沿觸發(fā),如果start為1,則將置數(shù)值賦給計(jì)數(shù)變量chief_h_temp,chief_l_temp,sub_h_temp,sub_l_temp;如果start為0,則chief_h_temp,chief_l_temp,sub_h_temp,sub_l_temp都將賦0值。Select為計(jì)數(shù)干道選擇寄存器,其初始值為0,對(duì)主干道的計(jì)數(shù)變量進(jìn)行減計(jì)數(shù)。每到來一個(gè)時(shí)鐘上升沿,對(duì)變量減1。其中有3種特殊情況:(以主干道為例)1 chief_l_temp為0,chief_h_temp大于1時(shí),chief_l_temp減1,chief_h_temp賦9。2 chief_l_temp大于1,小于9時(shí),當(dāng)chief_l_temp為5,chief_h_temp為0時(shí),flash賦1,低位繼續(xù)減,否則chief_l_temp減1。3 chief_l_temp為0,chief_h_temp等于0時(shí),select賦1,flash賦0