日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > ZYNQ
 
一、實(shí)驗(yàn)任務(wù)要求1)實(shí)現(xiàn)一交通十字路口處紅綠燈的基本定時(shí)控制功能,要求東西方向燈色循環(huán)為綠燈45秒,黃燈5秒,左拐燈15秒,黃燈5秒,紅燈40秒,黃燈5秒;南北方向燈色循環(huán)為紅燈65秒,黃燈5秒,綠燈20秒,黃燈5秒,左拐燈15秒,黃燈5秒。2)實(shí)現(xiàn)東西方向和南北方向各種燈的倒計(jì)時(shí)數(shù)碼顯示功能。二、LED分模塊設(shè)計(jì)(用于調(diào)用使用)
module LED (seg_data_1,seg_data_2,seg_led_1,seg_led_2);  input [3:0] seg_data_1;//數(shù)碼管需要顯示0~9十個(gè)數(shù)字,所以最少需要4位輸入做譯碼 input [3:0] seg_data_2;//小腳丫上第二個(gè)數(shù)碼管 output [8:0] seg_led_1;//在小腳丫上控制一個(gè)數(shù)碼管需要9個(gè)信號(hào) MSB~LSB=DIG、DP、G、F、E、D、C、B、A output [8:0] seg_led_2;//在小腳丫上第二個(gè)數(shù)碼管的控制信號(hào)  MSB~LSB=DIG、DP、G、F、E、D、C、B、A    reg [8:0] seg [9:0]; //定義了一個(gè)reg型的數(shù)組變量,相當(dāng)于一個(gè)10*9的存儲(chǔ)器,存儲(chǔ)器一共有10個(gè)數(shù),每個(gè)數(shù)有9位寬    initial //在過程塊中只能給reg型變量賦值,Verilog中有兩種過程塊always和initial  //initial和always不同,其中語句只執(zhí)行一次  begin  seg[0] = 9'h3f; //對(duì)存儲(chǔ)器中第一個(gè)數(shù)賦值9'b00_0011_1111,相當(dāng)于共陰極接地,DP點(diǎn)變低不亮,7段顯示數(shù)字  0  seg[1] = 9'h06; //7段顯示數(shù)字  1  seg[2] = 9'h5b; //7段顯示數(shù)字  2  seg[3] = 9'h4f; //7段顯示數(shù)字  3  seg[4] = 9'h66; //7段顯示數(shù)字  4  seg[5] = 9'h6d; //7段顯示數(shù)字  5  seg[6] = 9'h7d; //7段顯示數(shù)字  6  seg[7] = 9'h07; //7段顯示數(shù)字  7  seg[8] = 9'h7f; //7段顯示數(shù)字  8  seg[9] = 9'h6f; //7段顯示數(shù)字  9  end    assign seg_led_1 = seg[seg_data_1]; //連續(xù)賦值,這樣輸入不同四位數(shù),就能輸出對(duì)于譯碼的9位輸出  assign seg_led_2 = seg[seg_data_2];   endmodule
三、主程序代碼
module traffic1(Clk_12M,Rst,LedR_1,LedG_1,LedB_1,LedR_2,LedG_2,LedB_2,Seg7_VH,Seg7_VL,led15,led16,led17,ledCntDis);  parameter S0 = 0;   //主路綠燈,支路紅燈  parameter S1 = 1;   //主路黃燈,支路紅燈  parameter S2 = 2;   //主路藍(lán)燈,支路紅燈  parameter S3 = 3;   //主路黃燈,支路黃燈  parameter S4 = 4;   //主路紅燈,支路綠燈  parameter S5 = 5;   //主路紅燈,支路黃燈  parameter S6 = 6;   //主路紅燈,支路藍(lán)燈  parameter S7 = 7;   //主路黃燈,支路黃燈  input Clk_12M,Rst;  output LedR_1,LedG_1,LedB_1,LedR_2,LedG_2,LedB_2;  output [8:0]Seg7_VH,Seg7_VL;  output led15,led16,led17;  reg LedR_1,LedG_1,LedB_1,LedR_2,LedG_2,LedB_2;  reg Clk_1Hz;//分頻器  reg [31:0]Cnt_1Hz;//計(jì)數(shù)器  output reg[3:0] ledCntDis;  
該模塊是一個(gè)交通信號(hào)燈的Verilog描述,通過控制LED燈和數(shù)碼管來顯示不同的交通信號(hào)狀態(tài)。以下是對(duì)該模塊的解釋:輸入:
- Clk_12M:12MHz的時(shí)鐘信號(hào)- Rst:復(fù)位信號(hào)輸出:- LedR_1, LedG_1, LedB_1:控制第一個(gè)交通信號(hào)燈的紅、綠、藍(lán)LED燈- LedR_2, LedG_2, LedB_2:控制第二個(gè)交通信號(hào)燈的紅、綠、藍(lán)LED燈- Seg7_VH, Seg7_VL:控制數(shù)碼管顯示的高位和低位數(shù)碼- led15, led16, led17:輔助LED燈輸出- ledCntDis:控制數(shù)碼管顯示的計(jì)數(shù)器輸出內(nèi)部變量:
- Clk_1Hz:1Hz的時(shí)鐘信號(hào),通過分頻器實(shí)現(xiàn)- Cnt_1Hz:1Hz的計(jì)數(shù)器,用于控制信號(hào)燈狀態(tài)的切換參數(shù):
- S0-S7:交通信號(hào)燈的不同狀態(tài),例如S0表示主路綠燈,支路紅燈該模塊通過時(shí)鐘信號(hào)進(jìn)行節(jié)拍控制,通過狀態(tài)機(jī)的方式實(shí)現(xiàn)交通信號(hào)燈的循環(huán)切換。通過適時(shí)改變LED燈和數(shù)碼管的輸出,實(shí)現(xiàn)不同狀態(tài)下的交通信號(hào)顯示。具體的狀態(tài)與信號(hào)燈顯示對(duì)應(yīng)關(guān)系是根據(jù)參數(shù)定義的。
在每個(gè)時(shí)鐘周期,計(jì)數(shù)器Cnt_1Hz會(huì)自增,并根據(jù)計(jì)數(shù)器的值切換交通信號(hào)燈的狀態(tài)和LED燈的輸出。同時(shí),數(shù)碼管和輔助LED燈也會(huì)根據(jù)需要進(jìn)行相應(yīng)的顯示。
需要注意的是,該模塊中的LedR_1, LedG_1等輸出信號(hào)使用reg聲明,表示它們是可寄存器的輸出信號(hào)。
/*分頻器模塊*/  always@(posedge Clk_12M or negedge Rst)  begin  if(!Rst)  begin  Cnt_1Hz<=1;  Clk_1Hz<=1;  //分頻器和計(jì)數(shù)器全部設(shè)置為初值1  end  else  begin  if(Cnt_1Hz>=6000000)//當(dāng)計(jì)數(shù)器大于等于2510的六次方  begin  Cnt_1Hz<=1;//計(jì)數(shù)器置一  Clk_1Hz<=~Clk_1Hz;//分頻器取反  end  else  Cnt_1Hz<=Cnt_1Hz+1;  end  end
這部分代碼描述了一個(gè)分頻器模塊,用于將輸入的12MHz時(shí)鐘信號(hào)分頻為1Hz的信號(hào)。以下是對(duì)代碼的解釋:
在`always @(posedge Clk_12M or negedge Rst)`的敏感列表中,當(dāng)輸入的時(shí)鐘信號(hào)Clk_12M上升沿或復(fù)位信號(hào)Rst的下降沿發(fā)生時(shí),會(huì)執(zhí)行下面的代碼塊。
根據(jù)復(fù)位信號(hào)Rst的狀態(tài),通過if-else語句進(jìn)行條件判斷和處理:
- 如果復(fù)位信號(hào)Rst為低電平(即復(fù)位有效),則在分頻器和計(jì)數(shù)器的初值都設(shè)置為1,表示初始狀態(tài)。- 如果復(fù)位信號(hào)Rst為高電平(即復(fù)位無效),則執(zhí)行下面的邏輯。在非復(fù)位狀態(tài)下,判斷計(jì)數(shù)器Cnt_1Hz是否大于等于6000000(即25 * 10^6),如果是,則表示達(dá)到了1Hz的分頻要求:
- 將計(jì)數(shù)器Cnt_1Hz重新置為1。- 將分頻器Clk_1Hz取反,實(shí)現(xiàn)1Hz的方波輸出。如果計(jì)數(shù)器Cnt_1Hz未達(dá)到指定值,則將計(jì)數(shù)器的值加1。
通過這段代碼,實(shí)現(xiàn)了將12MHz時(shí)鐘信號(hào)分頻為1Hz的功能,并且保持了分頻器和計(jì)數(shù)器的狀態(tài)在復(fù)位前后的一致性。分頻器的輸出Clk_1Hz可以作為其他模塊中需要1Hz時(shí)鐘信號(hào)的輸入。
 /*計(jì)數(shù)器模塊*/  reg[7:0]Cnt70;//用于控制燈的變換  always@(posedge Clk_1Hz or negedge Rst)  begin  if(!Rst)  begin  Cnt70<=0;  end  else  begin  if(Cnt70>=115)  begin  Cnt70<=0;//復(fù)位  end  else  Cnt70<=Cnt70+1;  end  end     /*計(jì)數(shù)器模塊*/  reg[7:0]Cnt10;//用于控制數(shù)碼管的變換  always@(posedge Clk_1Hz or negedge Rst)  begin  if(!Rst)  begin  Cnt10<=115;  end  else  begin  if(Cnt10<=0)  begin  Cnt10<=115;//復(fù)位  end  else  Cnt10<=Cnt10-1;  end  end  
這部分代碼描述了兩個(gè)計(jì)數(shù)器模塊,分別用于計(jì)數(shù)到特定的值并進(jìn)行復(fù)位操作。以下是對(duì)這兩個(gè)代碼塊的解釋:第一個(gè)計(jì)數(shù)器模塊:- 聲明了一個(gè)8位的寄存器變量Cnt70用于計(jì)數(shù)。- 在`always @(posedge Clk_1Hz or negedge Rst)`的敏感列表中,當(dāng)輸入的時(shí)鐘信號(hào)Clk_1Hz上升沿或復(fù)位信號(hào)Rst的下降沿發(fā)生時(shí),會(huì)執(zhí)行下面的代碼塊。- 如果復(fù)位信號(hào)Rst為低電平(即復(fù)位有效),則將計(jì)數(shù)器Cnt70置為0。- 如果復(fù)位信號(hào)Rst為高電平(即復(fù)位無效),則判斷計(jì)數(shù)器Cnt70是否大于等于115。如果是,表示計(jì)數(shù)器已經(jīng)達(dá)到了指定的值,將計(jì)數(shù)器Cnt70復(fù)位為0。- 如果計(jì)數(shù)器Cnt70未達(dá)到指定值,則將計(jì)數(shù)器的值加1。第二個(gè)計(jì)數(shù)器模塊:
- 同樣,聲明了一個(gè)8位的寄存器變量Cnt10用于計(jì)數(shù)。- 在`always @(posedge Clk_1Hz or negedge Rst)`的敏感列表中,當(dāng)輸入的時(shí)鐘信號(hào)Clk_1Hz上升沿或復(fù)位信號(hào)Rst的下降沿發(fā)生時(shí),會(huì)執(zhí)行下面的代碼塊。- 如果復(fù)位信號(hào)Rst為低電平(即復(fù)位有效),則將計(jì)數(shù)器Cnt10置為115。- 如果復(fù)位信號(hào)Rst為高電平(即復(fù)位無效),則判斷計(jì)數(shù)器Cnt10是否小于等于0。如果是,表示計(jì)數(shù)器已經(jīng)減到了指定的值,將計(jì)數(shù)器Cnt10復(fù)位為115。- 如果計(jì)數(shù)器Cnt10未減到指定值,則將計(jì)數(shù)器的值減1。通過這兩個(gè)計(jì)數(shù)器模塊,可以實(shí)現(xiàn)對(duì)計(jì)數(shù)值的控制和復(fù)位操作。這些計(jì)數(shù)器可用于控制特定時(shí)間、時(shí)序或事件需要的計(jì)數(shù)和復(fù)位功能。
 /*數(shù)碼管模塊*/  reg[7:0]CntDis; reg[7:0]Cnt71; reg [7:0] Cnt61;  always@(posedge Clk_12M)//BCD碼轉(zhuǎn)換  begin  if(Cnt10>70)  begin  Cnt71[7:0]<=(Cnt10-70)/10;  CntDis[7:4]<=Cnt71[3:0];  Cnt61[7:0]<=Cnt10-((Cnt10-70)/10)*10-70; CntDis[3:0]<=Cnt61[3:0];  end  else if (Cnt10>65)  begin Cnt71[7:0]<=(Cnt10-65)/10;  CntDis[7:4]<=Cnt71[3:0];  Cnt61[7:0]<=Cnt10-((Cnt10-65)/10)*10-65; CntDis[3:0]<=Cnt61[3:0];  end  else if (Cnt10>50)  begin  Cnt71[7:0]<=(Cnt10-50)/10;  CntDis[7:4]<=Cnt71[3:0];  Cnt61[7:0]<=Cnt10-((Cnt10-50)/10)*10-50; CntDis[3:0]<=Cnt61[3:0];  end  else if (Cnt10>45)  begin  Cnt71[7:0]<=(Cnt10-45)/10;  CntDis[7:4]<=Cnt71[3:0];  Cnt61[7:0]<=Cnt10-((Cnt10-45)/10)*10-45; CntDis[3:0]<=Cnt61[3:0];  end  else if (Cnt10>25)  begin  Cnt71[7:0]<=(Cnt10-25)/10;  CntDis[7:4]<=Cnt71[3:0];  Cnt61[7:0]<=Cnt10-((Cnt10-25)/10)*10-25; CntDis[3:0]<=Cnt61[3:0];  end  else if (Cnt10>20)  begin  Cnt71[7:0]<=(Cnt10-20)/10;  CntDis[7:4]<=Cnt71[3:0];  Cnt61[7:0]<=Cnt10-((Cnt10-20)/10)*10-20; CntDis[3:0]<=Cnt61[3:0];  end  else if (Cnt10>5)  begin  Cnt71[7:0]<=(Cnt10-5)/10;  CntDis[7:4]<=Cnt71[3:0];  Cnt61[7:0]<=Cnt10-((Cnt10-5)/10)*10-5; CntDis[3:0]<=Cnt61[3:0]; end else if (Cnt10>0)  begin  Cnt71[7:0]<=Cnt10/10;  CntDis[7:4]<=Cnt71[3:0];  Cnt61[7:0]<=Cnt10; CntDis[3:0]<=Cnt61[3:0]; end      end    always@(posedge Clk_12M)  begin  ledCntDis<=CntDis[3:0];  end   //數(shù)碼管調(diào)用實(shí)例  LED hex(CntDis[3:0],CntDis[7:4],Seg7_VL,Seg7_VH);
這部分代碼描述了一個(gè)數(shù)碼管模塊,它用于將計(jì)數(shù)器的值轉(zhuǎn)換為BCD碼,并將BCD碼通過數(shù)碼管進(jìn)行顯示。以下是對(duì)代碼的解釋:在第一個(gè)always塊中,通過對(duì)12MHz時(shí)鐘信號(hào)Clk_12M的上升沿進(jìn)行敏感監(jiān)聽,實(shí)現(xiàn)對(duì)計(jì)數(shù)器Cnt10值的轉(zhuǎn)換和BCD碼的生成。
- 根據(jù)不同的計(jì)數(shù)范圍,將Cnt10的值減去一個(gè)基準(zhǔn)并除以10,得到一個(gè)高位數(shù)。- 通過減法、除法和取余運(yùn)算,計(jì)算得到一個(gè)低位數(shù)。- 通過賦值操作,將高位數(shù)和低位數(shù)分別存儲(chǔ)到CntDis的7:4位和3:0位。在第二個(gè)always塊中,對(duì)12MHz時(shí)鐘信號(hào)Clk_12M的上升沿進(jìn)行敏感監(jiān)聽,將CntDis的低4位賦值給ledCntDis。這樣,ledCntDis可以作為控制數(shù)碼管顯示的信號(hào),通過連接到相應(yīng)的LED顯示模塊。最后,通過實(shí)例化一個(gè)名為hex的LED模塊,將CntDis的3:0位和7:4位分別連接到Seg7_VL和Seg7_VH輸入,從而實(shí)現(xiàn)數(shù)碼管的顯示。
通過這段代碼,可以將計(jì)數(shù)器的值轉(zhuǎn)換為BCD碼,并通過數(shù)碼管進(jìn)行顯示,實(shí)現(xiàn)實(shí)時(shí)的數(shù)值顯示功能。
 //狀態(tài)轉(zhuǎn)換  reg [2:0] state;  always@(posedge Clk_12M or negedge Rst)  begin  if(!Rst)  begin  LedR_1<=0;  LedG_1<=0;  LedB_1<=0;  LedR_2<=0;  LedG_2<=0;  LedB_2<=0;  end  else  begin  case(state)  S0://主路綠燈45s  begin  if(Cnt70<=45)  begin  LedR_1<=1;  LedG_1<=0;  LedB_1<=1;  LedR_2<=0;  LedG_2<=1;  LedB_2<=1;  end  else  state<=S1;  end  S1://主路黃燈5s  begin  if(Cnt70<=50)  begin  LedR_1<=0;  LedG_1<=0;  LedB_1<=1;  LedR_2<=0;  LedG_2<=1;  LedB_2<=1;  end  else  state<=S2;  end      S2://主路藍(lán)燈15s  begin  if(Cnt70<=65)  begin  LedR_1<=1;  LedG_1<=1;  LedB_1<=0;  LedR_2<=0;  LedG_2<=1;  LedB_2<=1;  end  else  state<=S3;  end      S3://主輔均5s黃  begin  if(Cnt70<=70)  begin  LedR_1<=0;  LedG_1<=0;  LedB_1<=1;  LedR_2<=0;  LedG_2<=0;  LedB_2<=1;  end  else  state<=S4;  end      S4://輔路綠20s  begin  if(Cnt70<=90)  begin  LedR_1<=0;  LedG_1<=1;  LedB_1<=1;  LedR_2<=1;  LedG_2<=0;  LedB_2<=1;  end  else  state<=S5;  end    S5://輔路黃燈5s  begin  if(Cnt70<=95)  begin  LedR_1<=0;  LedG_1<=1;  LedB_1<=1;  LedR_2<=0;  LedG_2<=0;  LedB_2<=1;  end  else  state<=S6;  end      S6://輔路藍(lán)燈15s  begin  if(Cnt70<=110)  begin  LedR_1<=0;  LedG_1<=1;  LedB_1<=1;  LedR_2<=1;  LedG_2<=1;  LedB_2<=0;  end  else  state<=S7;  end        S7://主輔路均黃燈5s  begin  if(Cnt70>=111)  begin  LedR_1<=0;  LedG_1<=0;  LedB_1<=1;  LedR_2<=0;  LedG_2<=0;  LedB_2<=1;  end  else  state<=S0;  end    default   begin  LedR_1<=0;  LedG_1<=0;  LedB_1<=0;  LedR_2<=0;  LedG_2<=0;  LedB_2<=0;  end  endcase  end  end          assign {led17,led16,led15}=state;  endmodule
這段代碼是一個(gè)用Verilog描述的狀態(tài)轉(zhuǎn)換邏輯。它根據(jù)時(shí)鐘信號(hào)和復(fù)位信號(hào)來控制LED燈的狀態(tài)。具體邏輯如下:1. 如果復(fù)位信號(hào)(Rst)為低電平,則將所有LED燈的狀態(tài)置為0。
2. 如果復(fù)位信號(hào)為高電平,則根據(jù)當(dāng)前的狀態(tài)(state)執(zhí)行相應(yīng)的操作。3. 當(dāng)前有三種狀態(tài)(S0、S1、S2),對(duì)應(yīng)不同的燈光控制邏輯。 - S0狀態(tài):主路綠燈亮,持續(xù)45s。 - S1狀態(tài):主路黃燈亮,持續(xù)5s。 - S2狀態(tài):其他狀態(tài),可以在代碼中后續(xù)定義。 如此下去直到進(jìn)行循環(huán)。具體的操作是根據(jù)一個(gè)計(jì)數(shù)器(Cnt70)來控制。當(dāng)計(jì)數(shù)器的值小于等于給定的時(shí)間時(shí),對(duì)應(yīng)的LED燈亮起;否則,切換到下一個(gè)狀態(tài)。
這段代碼中只給出了S0和S1兩個(gè)狀態(tài)的邏輯,你可以繼續(xù)補(bǔ)充其他狀態(tài)的實(shí)現(xiàn)。另外,根據(jù)你的具體需求,你可能還需要定義和使用一些其他變量和邏輯來實(shí)現(xiàn)完整的狀態(tài)轉(zhuǎn)換控制。
module traffic1(Clk_12M,Rst,LedR_1,LedG_1,LedB_1,LedR_2,LedG_2,LedB_2,Seg7_VH,Seg7_VL,led15,led16,led17,ledCntDis);  parameter S0 = 0;   //主路綠燈,支路紅燈  parameter S1 = 1;   //主路黃燈,支路紅燈  parameter S2 = 2;   //主路藍(lán)燈,支路紅燈  parameter S3 = 3;   //主路黃燈,支路黃燈  parameter S4 = 4;   //主路紅燈,支路綠燈  parameter S5 = 5;   //主路紅燈,支路黃燈  parameter S6 = 6;   //主路紅燈,支路藍(lán)燈  parameter S7 = 7;   //主路黃燈,支路黃燈  input Clk_12M,Rst;  output LedR_1,LedG_1,LedB_1,LedR_2,LedG_2,LedB_2;  output [8:0]Seg7_VH,Seg7_VL;  output led15,led16,led17;  reg LedR_1,LedG_1,LedB_1,LedR_2,LedG_2,LedB_2;  reg Clk_1Hz;//分頻器  reg [31:0]Cnt_1Hz;//計(jì)數(shù)器  output reg[3:0] ledCntDis;  /*分頻器模塊*/  always@(posedge Clk_12M or negedge Rst)  begin  if(!Rst)  begin  Cnt_1Hz<=1;  Clk_1Hz<=1;  //分頻器和計(jì)數(shù)器全部設(shè)置為初值1  end  else  begin  if(Cnt_1Hz>=6000000)//當(dāng)計(jì)數(shù)器大于等于2510的六次方  begin  Cnt_1Hz<=1;//計(jì)數(shù)器置一  Clk_1Hz<=~Clk_1Hz;//分頻器取反  end  else  Cnt_1Hz<=Cnt_1Hz+1;  end  end    /*計(jì)數(shù)器模塊*/  reg[7:0]Cnt70;  always@(posedge Clk_1Hz or negedge Rst)  begin  if(!Rst)  begin  Cnt70<=0;  end  else  begin  if(Cnt70>=115)  begin  Cnt70<=0;//復(fù)位  end  else  Cnt70<=Cnt70+1;  end  end     /*計(jì)數(shù)器模塊*/  reg[7:0]Cnt10;  always@(posedge Clk_1Hz or negedge Rst)  begin  if(!Rst)  begin  Cnt10<=115;  end  else  begin  if(Cnt10<=0)  begin  Cnt10<=115;//復(fù)位  end  else  Cnt10<=Cnt10-1;  end  end      /*數(shù)碼管模塊*/  reg[7:0]CntDis; reg[7:0]Cnt71; reg [7:0] Cnt61;  always@(posedge Clk_12M)//BCD碼轉(zhuǎn)換  begin  if(Cnt10>70)  begin  Cnt71[7:0]<=(Cnt10-70)/10;  CntDis[7:4]<=Cnt71[3:0];  Cnt61[7:0]<=Cnt10-((Cnt10-70)/10)*10-70; CntDis[3:0]<=Cnt61[3:0];  end  else if (Cnt10>65)  begin Cnt71[7:0]<=(Cnt10-65)/10;  CntDis[7:4]<=Cnt71[3:0];  Cnt61[7:0]<=Cnt10-((Cnt10-65)/10)*10-65; CntDis[3:0]<=Cnt61[3:0];  end  else if (Cnt10>50)  begin  Cnt71[7:0]<=(Cnt10-50)/10;  CntDis[7:4]<=Cnt71[3:0];  Cnt61[7:0]<=Cnt10-((Cnt10-50)/10)*10-50; CntDis[3:0]<=Cnt61[3:0];  end  else if (Cnt10>45)  begin  Cnt71[7:0]<=(Cnt10-45)/10;  CntDis[7:4]<=Cnt71[3:0];  Cnt61[7:0]<=Cnt10-((Cnt10-45)/10)*10-45; CntDis[3:0]<=Cnt61[3:0];  end  else if (Cnt10>25)  begin  Cnt71[7:0]<=(Cnt10-25)/10;  CntDis[7:4]<=Cnt71[3:0];  Cnt61[7:0]<=Cnt10-((Cnt10-25)/10)*10-25; CntDis[3:0]<=Cnt61[3:0];  end  else if (Cnt10>20)  begin  Cnt71[7:0]<=(Cnt10-20)/10;  CntDis[7:4]<=Cnt71[3:0];  Cnt61[7:0]<=Cnt10-((Cnt10-20)/10)*10-20; CntDis[3:0]<=Cnt61[3:0];  end  else if (Cnt10>5)  begin  Cnt71[7:0]<=(Cnt10-5)/10;  CntDis[7:4]<=Cnt71[3:0];  Cnt61[7:0]<=Cnt10-((Cnt10-5)/10)*10-5; CntDis[3:0]<=Cnt61[3:0]; end else if (Cnt10>0)  begin  Cnt71[7:0]<=Cnt10/10;  CntDis[7:4]<=Cnt71[3:0];  Cnt61[7:0]<=Cnt10; CntDis[3:0]<=Cnt61[3:0]; end      end    always@(posedge Clk_12M)  begin  ledCntDis<=CntDis[3:0];  end   //數(shù)碼管調(diào)用實(shí)例  LED hex(CntDis[3:0],CntDis[7:4],Seg7_VL,Seg7_VH);        //狀態(tài)轉(zhuǎn)換  reg [2:0] state;  always@(posedge Clk_12M or negedge Rst)  begin  if(!Rst)  begin  LedR_1<=0;  LedG_1<=0;  LedB_1<=0;  LedR_2<=0;  LedG_2<=0;  LedB_2<=0;  end  else  begin  case(state)  S0://主路綠燈45s  begin  if(Cnt70<=45)  begin  LedR_1<=1;  LedG_1<=0;  LedB_1<=1;  LedR_2<=0;  LedG_2<=1;  LedB_2<=1;  end  else  state<=S1;  end  S1://主路黃燈5s  begin  if(Cnt70<=50)  begin  LedR_1<=0;  LedG_1<=0;  LedB_1<=1;  LedR_2<=0;  LedG_2<=1;  LedB_2<=1;  end  else  state<=S2;  end      S2://主路藍(lán)燈15s  begin  if(Cnt70<=65)  begin  LedR_1<=1;  LedG_1<=1;  LedB_1<=0;  LedR_2<=0;  LedG_2<=1;  LedB_2<=1;  end  else  state<=S3;  end      S3://主輔均5s黃  begin  if(Cnt70<=70)  begin  LedR_1<=0;  LedG_1<=0;  LedB_1<=1;  LedR_2<=0;  LedG_2<=0;  LedB_2<=1;  end  else  state<=S4;  end      S4://輔路綠20s  begin  if(Cnt70<=90)  begin  LedR_1<=0;  LedG_1<=1;  LedB_1<=1;  LedR_2<=1;  LedG_2<=0;  LedB_2<=1;  end  else  state<=S5;  end    S5://輔路黃燈5s  begin  if(Cnt70<=95)  begin  LedR_1<=0;  LedG_1<=1;  LedB_1<=1;  LedR_2<=0;  LedG_2<=0;  LedB_2<=1;  end  else  state<=S6;  end      S6://輔路藍(lán)燈15s  begin  if(Cnt70<=110)  begin  LedR_1<=0;  LedG_1<=1;  LedB_1<=1;  LedR_2<=1;  LedG_2<=1;  LedB_2<=0;  end  else  state<=S7;  end        S7://主輔路均黃燈5s  begin  if(Cnt70>=111)  begin  LedR_1<=0;  LedG_1<=0;  LedB_1<=1;  LedR_2<=0;  LedG_2<=0;  LedB_2<=1;  end  else  state<=S0;  end    default   begin  LedR_1<=0;  LedG_1<=0;  LedB_1<=0;  LedR_2<=0;  LedG_2<=0;  LedB_2<=0;  end  endcase  end  end          assign {led17,led16,led15}=state;  endmodule
以上是程序總代碼。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉