⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨

明(míng)德揚 · 为(wèi)國(guó)育芯才

至(zhì)簡設計(jì)法發(fà)明(míng)單位 | FPGA软(ruǎn)硬(yìng)件(jiàn)一(yī)站式服(fú)务商

【案(àn)例】狀态機(jī)实現(xiàn)LED交通(tòng)燈(dēng)設計(jì)

  發(fà)布(bù)时(shí)間(jiān):2023-10-19  |    作者(zhě):管(guǎn)理員  |  浏覽量(liàng):2539

本(běn)文(wén)为(wèi)明(míng)德揚原創及(jí)录(lù)用(yòng)文(wén)章(zhāng),轉(zhuǎn)载請注明(míng)出(chū)处!

1.1 總(zǒng)體(tǐ)設計(jì)

1.1.1 概述

發(fà)光(guāng)二(èr)极(jí)管(guǎn)簡稱为(wèi)LED,是(shì)一(yī)種(zhǒng)常用(yòng)的(de)發(fà)光(guāng)器件(jiàn),通(tòng)过(guò)電(diàn)子與(yǔ)空穴複合釋放(fàng)能(néng)量(liàng)發(fà)光(guāng),可(kě)以(yǐ)高(gāo)效的(de)将電(diàn)能(néng)轉(zhuǎn)化(huà)为(wèi)光(guāng)能(néng),在(zài)現(xiàn)代(dài)社会(huì)具有(yǒu)廣泛的(de)用(yòng)途,如(rú)照明(míng)、平板顯示、醫療器件(jiàn)等。可(kě)通(tòng)过(guò)高(gāo)低電(diàn)平的(de)變(biàn)化(huà)来(lái)控制LED燈(dēng)的(de)明(míng)滅狀态,當輸出(chū)信(xìn)号(hào)为(wèi)低電(diàn)平时(shí),LED燈(dēng)亮(liàng),反(fǎn)之,當輸出(chū)信(xìn)号(hào)为(wèi)高(gāo)電(diàn)平时(shí),LED燈(dēng)滅。


1.1.2 設計(jì)目标(biāo)

內(nèi)容:開(kāi)發(fà)板上(shàng)有(yǒu)紅(hóng)黃綠(lǜ) LED 燈(dēng)各(gè)四(sì)个(gè),分(fēn)别放(fàng)在(zài)東(dōng)西(xī)南(nán)北(běi)方(fāng)向(xiàng)。參考交通(tòng)燈(dēng)的(de)情(qíng)況,即每个(gè)方(fāng)向(xiàng)都是(shì)綠(lǜ)燈(dēng)亮(liàng) 10 秒(miǎo),然後(hòu)黃燈(dēng)亮(liàng) 5 秒(miǎo),然後(hòu)紅(hóng)燈(dēng)亮(liàng) 15 秒(miǎo)。綠(lǜ)燈(dēng)按照東(dōng)西(xī)和(hé)南(nán)北(běi)的(de)順序依次(cì)亮(liàng)。

具體(tǐ)思(sī)路(lù):

1. 首先(xiān)分(fēn)東(dōng)西(xī)方(fāng)向(xiàng)和(hé)南(nán)北(běi)方(fāng)向(xiàng)来(lái)設計(jì)電(diàn)路(lù)。設計(jì)两(liǎng)个(gè)不(bù)同(tóng)的(de)狀态機(jī)来(lái)指示不(bù)同(tóng)的(de)狀态。東(dōng)西(xī)方(fāng)向(xiàng)的(de)燈(dēng)狀态相同(tóng),南(nán)北(běi)方(fāng)向(xiàng)的(de)燈(dēng)狀态相同(tóng)。

2. 4个(gè)方(fāng)向(xiàng)的(de)燈(dēng)依次(cì)为(wèi)紅(hóng)綠(lǜ)黃的(de)依次(cì)循环(huán)时(shí)間(jiān)为(wèi) 15+10+5=30 秒(miǎo),所(suǒ)以(yǐ)可(kě)以(yǐ)設計(jì)一(yī)个(gè)計(jì)數器,計(jì)时(shí) 30 秒(miǎo)鐘(zhōng),表(biǎo)示一(yī)个(gè)循环(huán)。計(jì)數器可(kě)以(yǐ)分(fēn)两(liǎng)个(gè)写,一(yī)个(gè)計(jì)时(shí) 1秒(miǎo),一(yī)个(gè)計(jì)时(shí) 30秒(miǎo)。

3. 然後(hòu)再根(gēn)據(jù)計(jì)數器的(de)計(jì)數值的(de)不(bù)同(tóng),決定(dìng)狀态機(jī)的(de)不(bù)同(tóng)狀态。

4. 首先(xiān)設計(jì)東(dōng)西(xī)方(fāng)向(xiàng)的(de)狀态機(jī),複位的(de)时(shí)候,綠(lǜ)燈(dēng)亮(liàng),計(jì)數器計(jì)到(dào) 10 秒(miǎo),黃燈(dēng)亮(liàng),計(jì)到(dào)15 秒(miǎo),紅(hóng)燈(dēng)亮(liàng),計(jì)滿 30 秒(miǎo),又是(shì)綠(lǜ)燈(dēng)亮(liàng)......依次(cì)循环(huán)。

5. 接着設計(jì)南(nán)北(běi)方(fāng)向(xiàng)的(de)狀态機(jī),複位的(de)时(shí)候,紅(hóng)燈(dēng)亮(liàng),計(jì)數器計(jì)到(dào)15 秒(miǎo),綠(lǜ)燈(dēng)亮(liàng),計(jì)到(dào)20 秒(miǎo),黃燈(dēng)亮(liàng),計(jì)滿 30 秒(miǎo),又是(shì)紅(hóng)燈(dēng)亮(liàng)......依次(cì)循环(huán)。


1.1.3信(xìn)号(hào)列表(biǎo)

「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2


1.1.4 設計(jì)思(sī)路(lù)

根(gēn)據(jù)題(tí)目功能(néng)要(yào)求,東(dōng)西(xī)南(nán)北(běi)四(sì)个(gè)方(fāng)向(xiàng)LED燈(dēng)按照“紅(hóng)燈(dēng)-綠(lǜ)燈(dēng)-黃燈(dēng)”的(de)順序依次(cì)循环(huán)时(shí)間(jiān)为(wèi) 15+10+5=30 秒(miǎo),所(suǒ)以(yǐ)可(kě)以(yǐ)設計(jì)一(yī)个(gè)計(jì)數器,計(jì)时(shí) 30 秒(miǎo)鐘(zhōng)表(biǎo)示一(yī)个(gè)循环(huán)。該計(jì)數器可(kě)以(yǐ)分(fēn)两(liǎng)个(gè)写,一(yī)个(gè)計(jì)时(shí) 1 秒(miǎo),一(yī)个(gè)計(jì)时(shí) 30秒(miǎo)。

因(yīn)为(wèi)在(zài)數字(zì)電(diàn)路(lù)中(zhōng)的(de)延时(shí)都是(shì)通(tòng)过(guò)計(jì)數器实現(xiàn)的(de),計(jì)數器*时(shí)鐘(zhōng)周期(qī)=延时(shí)时(shí)間(jiān)。本(běn)模块(kuài)中(zhōng),由(yóu)于(yú)輸入(rù)时(shí)鐘(zhōng)是(shì)50MHz,时(shí)鐘(zhōng)周期(qī)为(wèi)20ns,功能(néng)要(yào)求每1秒(miǎo)變(biàn)化(huà)一(yī)次(cì)。我(wǒ)们(men)通(tòng)过(guò)counter来(lái)表(biǎo)示延时(shí),當其值为(wèi)1s/20ns=5000_0000时(shí),表(biǎo)示1秒(miǎo)时(shí)間(jiān)到(dào)。

两(liǎng)个(gè)計(jì)數器的(de)架構图(tú):

「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2

时(shí)鐘(zhōng)計(jì)數器counter:該計(jì)數器用(yòng)于(yú)計(jì)算1s的(de)时(shí)鐘(zhōng)个(gè)數,加一(yī)条(tiáo)件(jiàn)为(wèi)1,表(biǎo)示一(yī)直(zhí)計(jì)數;數到(dào)5000_0000下(xià),則表(biǎo)示數到(dào)1秒(miǎo)的(de)时(shí)間(jiān)了(le)。

秒(miǎo)計(jì)數器:該計(jì)數器用(yòng)于(yú)計(jì)算1个(gè)周期(qī)內(nèi)三(sān)色(sè)LED按順序各(gè)點(diǎn)亮(liàng)1次(cì)的(de)时(shí)間(jiān),1周期(qī)的(de)时(shí)間(jiān)为(wèi)30秒(miǎo),加一(yī)条(tiáo)件(jiàn)为(wèi)时(shí)鐘(zhōng)計(jì)數器的(de)結束(shù)条(tiáo)件(jiàn),表(biǎo)示时(shí)鐘(zhōng)計(jì)數器每數完1s,秒(miǎo)計(jì)數器計(jì)數加一(yī);數到(dào)30下(xià),則表(biǎo)示數到(dào)30秒(miǎo)的(de)时(shí)間(jiān)了(le)。

下(xià)面(miàn)是(shì)两(liǎng)个(gè)計(jì)數器的(de)代(dài)碼:

1.	parameter   COUNT_TIME      =   26'd5000_0000;
2.	parameter   CYCLE_TIME       =   5'd30        ;
3.	parameter   COUNT_WID       =   26           ;
4.	parameter   SEC_WID          =   5            ;
5.	
6.	reg     [COUNT_WID-1:0] counter             ;
7.	wire                    add_counter         ;
8.	wire                    end_counter         ;
9.	reg     [SEC_WID-1:0]    second             ;
10.	wire                    add_second          ;
11.	wire                    end_second          ;
12.	
13.	always @(posedge clk or negedge rst_n) begin 
14.	    if (rst_n==0) begin
15.	        counter <= 0; 
16.	    end
17.	    else if(add_counter) begin
18.	        if(end_counter)
19.	            counter <= 0; 
20.	        else
21.	            counter <= counter+1 ;
22.	   end
23.	end
24.	assign add_counter = 1;
25.	assign end_counter = add_counter  && counter == COUNT_TIME-1 ;
26.	
27.	
28.	always @(posedge clk or negedge rst_n) begin 
29.	    if (rst_n==0) begin
30.	        second <= 0; 
31.	    end
32.	    else if(add_second) begin
33.	        if(end_second)
34.	            second <= 0; 
35.	        else
36.	            second <= second+1 ;
37.	   end
38.	end
39.	assign add_second = end_counter;
40.	assign end_second = add_second  && second == CYCLE_TIME-1 ;



按照題(tí)目要(yào)求:分(fēn)東(dōng)西(xī)方(fāng)向(xiàng)和(hé)南(nán)北(běi)方(fāng)向(xiàng)来(lái)設計(jì)電(diàn)路(lù),因(yīn)此(cǐ)設計(jì)两(liǎng)个(gè)不(bù)同(tóng)的(de)狀态機(jī)来(lái)指示不(bù)同(tóng)的(de)狀态——同(tóng)一(yī)时(shí)間(jiān)內(nèi),東(dōng)西(xī)方(fāng)向(xiàng)的(de)燈(dēng)狀态相同(tóng),南(nán)北(běi)方(fāng)向(xiàng)的(de)燈(dēng)狀态相同(tóng)。

两(liǎng)个(gè)狀态機(jī)的(de)架構:

「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2
「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2

東(dōng)西(xī)方(fāng)向(xiàng)的(de)狀态機(jī):該狀态機(jī)用(yòng)于(yú)設定(dìng)東(dōng)西(xī)方(fāng)向(xiàng)LED的(de)顔色(sè)跳轉(zhuǎn)狀态。

1) 上(shàng)電(diàn)後(hòu),就(jiù)跳轉(zhuǎn)到(dào)綠(lǜ)燈(dēng)亮(liàng)狀态,綠(lǜ)燈(dēng)亮(liàng);

2) 10 秒(miǎo)後(hòu),黃燈(dēng)亮(liàng),跳轉(zhuǎn)条(tiáo)件(jiàn)为(wèi)秒(miǎo)計(jì)數器計(jì)數10下(xià),即add_second &&second==10-1,則表(biǎo)示數到(dào)10秒(miǎo)了(le);

3) 5 秒(miǎo)後(hòu),紅(hóng)燈(dēng)亮(liàng),跳轉(zhuǎn)条(tiáo)件(jiàn)为(wèi)秒(miǎo)計(jì)數器計(jì)數15下(xià),即add_second &&second==15-1,則表(biǎo)示數到(dào)15秒(miǎo)了(le);

4) 15 秒(miǎo)後(hòu),又是(shì)綠(lǜ)燈(dēng)亮(liàng),跳轉(zhuǎn)条(tiáo)件(jiàn)为(wèi)秒(miǎo)計(jì)數器計(jì)滿30下(xià),即add_second &&second==30-1,則表(biǎo)示數到(dào)30秒(miǎo)了(le)......依次(cì)循环(huán)。

南(nán)北(běi)方(fāng)向(xiàng)的(de)狀态機(jī):該狀态機(jī)用(yòng)于(yú)設定(dìng)南(nán)北(běi)方(fāng)向(xiàng)LED的(de)顔色(sè)跳轉(zhuǎn)狀态。

1) 上(shàng)電(diàn)後(hòu),就(jiù)跳轉(zhuǎn)到(dào)紅(hóng)燈(dēng)亮(liàng)狀态,紅(hóng)燈(dēng)亮(liàng);

2) 15 秒(miǎo)後(hòu),綠(lǜ)燈(dēng)亮(liàng),跳轉(zhuǎn)条(tiáo)件(jiàn)为(wèi)秒(miǎo)計(jì)數器計(jì)數15下(xià),即add_second &&second==15-1,則表(biǎo)示數到(dào)15秒(miǎo)了(le);

3) 10 秒(miǎo)後(hòu),黃燈(dēng)亮(liàng),跳轉(zhuǎn)条(tiáo)件(jiàn)为(wèi)秒(miǎo)計(jì)數器計(jì)數25下(xià),即add_second &&second==25-1,則表(biǎo)示數到(dào)25秒(miǎo)了(le);

4) 5 秒(miǎo)後(hòu),又是(shì)紅(hóng)燈(dēng)亮(liàng),跳轉(zhuǎn)条(tiáo)件(jiàn)为(wèi)秒(miǎo)計(jì)數器計(jì)滿30下(xià),即add_second &&second==30-1,則表(biǎo)示數到(dào)30秒(miǎo)了(le)......依次(cì)循环(huán)。

下(xià)面(miàn)是(shì)東(dōng)西(xī)、南(nán)北(běi)方(fāng)向(xiàng)的(de)两(liǎng)个(gè)狀态機(jī)代(dài)碼:

41.	parameter   LED_NUM         =   3            ;
42.	parameter   STA_W            =   2            ;
43.	
44.	parameter   STA_G           =   2'd1         ;
45.	parameter   STA_Y           =   2'd2         ;
46.	parameter   STA_R           =   2'd3         ;
47.	parameter   IDLE            =   2'd0         ;
48.	parameter   GREEN          =   3'b110       ;
49.	parameter   YELLOW         =   3'b101       ;
50.	parameter   RED             =   3'b011       ;
51.	
52.	input                   clk                 ;
53.	input                   rst_n               ;
54.	output  [LED_NUM-1:0]   led_east            ;
55.	output  [LED_NUM-1:0]   led_south           ;
56.	output  [LED_NUM-1:0]   led_west            ;
57.	output  [LED_NUM-1:0]   led_north           ;
58.	
59.	reg     [LED_NUM-1:0]   led_east            ;
60.	reg     [LED_NUM-1:0]   led_south           ;
61.	reg     [LED_NUM-1:0]   led_west            ;
62.	reg     [LED_NUM-1:0]   led_north           ;
63.	
64.	reg     [STA_W-1:0]     ew_state_c            ;
65.	reg     [STA_W-1:0]     ew_state_n            ;
66.	wire                    idle2sta_g_start_ew   ;
67.	wire                    sta_g2sta_y_start_ew  ;
68.	wire                    sta_y2sta_r_start_ew  ;
69.	wire                    sta_r2sta_g_start_ew  ;
70.	
71.	reg     [STA_W-1:0]     sn_state_c            ;
72.	reg     [STA_W-1:0]     sn_state_n            ;
73.	wire                    idle2sta_r_start_sn   ;
74.	wire                    sta_r2sta_g_start_sn  ;
75.	wire                    sta_g2sta_y_start_sn  ;
76.	wire                    sta_y2sta_r_start_sn  ;
77.	
78.	always @(posedge clk or negedge rst_n) begin 
79.	    if (rst_n==0) begin
80.	        ew_state_c <= STA_G ;
81.	    end
82.	    else begin
83.	        ew_state_c <= ew_state_n;
84.	   end
85.	end
86.	
87.	always @(*) begin 
88.	    case(ew_state_c)  
89.	        STA_G :begin
90.	            if(sta_g2sta_y_start_ew) 
91.	                ew_state_n = STA_Y ;
92.	            else 
93.	                ew_state_n = ew_state_c ;
94.	        end
95.	        STA_Y :begin
96.	            if(sta_y2sta_r_start_ew) 
97.	                ew_state_n = STA_R ;
98.	            else 
99.	                ew_state_n = ew_state_c ;
100.	        end
101.	        STA_R :begin
102.	            if(sta_r2sta_g_start_ew) 
103.	                ew_state_n = STA_G ;
104.	            else 
105.	                ew_state_n = ew_state_c ;
106.	        end
107.	        default : ew_state_n = STA_G ;
108.	    endcase
109.	end
110.	
111.	assign sta_g2sta_y_start_ew = ew_state_c==STA_G && add_second  && second == 10-1;
112.	assign sta_y2sta_r_start_ew = ew_state_c==STA_Y && add_second  && second == 15-1;
113.	assign sta_r2sta_g_start_ew = ew_state_c==STA_R && add_second  && second == 30-1;
114.	
115.	always  @(posedge clk or negedge rst_n)begin
116.	    if(rst_n==1'b0)begin
117.	        led_east<=GREEN; 
118.	    end
119.	    else if(ew_state_c==STA_G)begin
120.	        led_east<=GREEN;
121.	    end
122.	    else if(ew_state_c==STA_Y)begin
123.	        led_east<=YELLOW;
124.	    end
125.	    else if(ew_state_c==STA_R)begin
126.	        led_east<=RED;
127.	    end
128.	    else begin
129.	        led_east<=GREEN;
130.	    end
131.	end
132.	
133.	always  @(posedge clk or negedge rst_n)begin
134.	    if(rst_n==1'b0)begin
135.	        led_west<=GREEN; 
136.	    end
137.	    else if(ew_state_c==STA_G)begin
138.	        led_west<=GREEN;
139.	    end
140.	    else if(ew_state_c==STA_Y)begin
141.	        led_west<=YELLOW;
142.	    end
143.	    else if(ew_state_c==STA_R)begin
144.	        led_west<=RED;
145.	    end
146.	    else begin
147.	        led_west<=GREEN;
148.	    end
149.	end
150.	
151.	
152.	
153.	always @(posedge clk or negedge rst_n) begin 
154.	    if (rst_n==0) begin
155.	        sn_state_c <= STA_R ;
156.	    end
157.	    else begin
158.	        sn_state_c <= sn_state_n;
159.	   end
160.	end
161.	
162.	always @(*) begin 
163.	    case(sn_state_c)  
164.	        STA_R :begin
165.	            if(sta_r2sta_g_start_sn) 
166.	                sn_state_n = STA_G ;
167.	            else 
168.	                sn_state_n = sn_state_c ;
169.	        end
170.	        STA_G :begin
171.	            if(sta_g2sta_y_start_sn) 
172.	                sn_state_n = STA_Y ;
173.	            else 
174.	                sn_state_n = sn_state_c ;
175.	        end
176.	        STA_Y :begin
177.	            if(sta_y2sta_r_start_sn) 
178.	                sn_state_n = STA_R ;
179.	            else 
180.	                sn_state_n = sn_state_c ;
181.	        end
182.	        default : sn_state_n = STA_R ;
183.	    endcase
184.	end
185.	
186.	assign sta_r2sta_g_start_sn = sn_state_c==STA_R && add_second  && second == 15-1;
187.	assign sta_g2sta_y_start_sn = sn_state_c==STA_G && add_second  && second == 25-1;
188.	assign sta_y2sta_r_start_sn = sn_state_c==STA_Y && add_second  && second == 30-1;
189.	
190.	always  @(posedge clk or negedge rst_n)begin
191.	    if(rst_n==1'b0)begin
192.	        led_south<=RED; 
193.	    end
194.	    else if(sn_state_c==STA_G)begin
195.	        led_south<=GREEN;
196.	    end
197.	    else if(sn_state_c==STA_Y)begin
198.	        led_south<=YELLOW;
199.	    end
200.	    else if(sn_state_c==STA_R)begin
201.	        led_south<=RED;
202.	    end
203.	    else begin
204.	        led_south<=GREEN;     
205.	    end
206.	end
207.	
208.	always  @(posedge clk or negedge rst_n)begin
209.	    if(rst_n==1'b0)begin
210.	        led_north<=RED; 
211.	    end
212.	    else if(sn_state_c==STA_G)begin
213.	        led_north<=GREEN;
214.	    end
215.	    else if(sn_state_c==STA_Y)begin
216.	        led_north<=YELLOW;
217.	    end
218.	    else if(sn_state_c==STA_R)begin
219.	        led_north<=RED;
220.	    end
221.	    else begin
222.	        led_north<=GREEN;   
223.	    end
224.	end



1.1.5參考設計(jì)代(dài)碼

225.	/************************************************************************************
226.	The code is designed and produced by MDY Science and Education Co., Ltd, which has the entire ownership. It is only for personal learning, which cannot be used for commercial or profit-making purposes without permission.
227.	
228.	    MDY's Mission: Develop Chip Talents and Realize National Chip Dream.
229.	
230.	    We sincerely hope that our students can learn the real IC / FPGA code through our standard and rigorous code.
231.	
232.	    For more FPGA learning materials, please visit the Forum: http://fpgabbs.com/ and official website: http://old.mdy-edu.com/index.html 
233.	
234.	    *************************************************************************************/
235.	
236.	
237.	module  traf_light2(
238.	    clk         ,
239.	    rst_n       ,
240.	    led_east    ,
241.	    led_south   ,
242.	    led_west    ,
243.	    led_north   
244.	    );
245.	
246.	
247.	
248.	parameter   COUNT_TIME      =   26'd5000_0000;
249.	parameter   CYCLE_TIME      =   5'd30        ;
250.	parameter   COUNT_WID       =   26           ;
251.	parameter   SEC_WID         =   5            ;
252.	parameter   LED_NUM         =   3            ;
253.	parameter   STA_W           =   2            ;
254.	
255.	parameter   STA_G           =   2'd1         ;
256.	parameter   STA_Y           =   2'd2         ;
257.	parameter   STA_R           =   2'd3         ;
258.	parameter   GREEN           =   3'b110       ;
259.	parameter   YELLOW          =   3'b101       ;
260.	parameter   RED             =   3'b011       ;
261.	
262.	
263.	input                   clk                 ;
264.	input                   rst_n               ;
265.	output  [LED_NUM-1:0]   led_east            ;
266.	output  [LED_NUM-1:0]   led_south           ;
267.	output  [LED_NUM-1:0]   led_west            ;
268.	output  [LED_NUM-1:0]   led_north           ;
269.	
270.	reg     [LED_NUM-1:0]   led_east            ;
271.	reg     [LED_NUM-1:0]   led_south           ;
272.	reg     [LED_NUM-1:0]   led_west            ;
273.	reg     [LED_NUM-1:0]   led_north           ;
274.	
275.	reg     [COUNT_WID-1:0] counter             ;
276.	wire                    add_counter         ;
277.	wire                    end_counter         ;
278.	reg     [SEC_WID-1:0]   second              ;
279.	wire                    add_second          ;
280.	wire                    end_second          ;
281.	
282.	reg     [STA_W-1:0]     ew_state_c            ;
283.	reg     [STA_W-1:0]     ew_state_n            ;
284.	wire                    idle2sta_g_start_ew   ;
285.	wire                    sta_g2sta_y_start_ew  ;
286.	wire                    sta_y2sta_r_start_ew  ;
287.	wire                    sta_r2sta_g_start_ew  ;
288.	
289.	reg     [STA_W-1:0]     sn_state_c            ;
290.	reg     [STA_W-1:0]     sn_state_n            ;
291.	wire                    idle2sta_r_start_sn   ;
292.	wire                    sta_r2sta_g_start_sn  ;
293.	wire                    sta_g2sta_y_start_sn  ;
294.	wire                    sta_y2sta_r_start_sn  ;
295.	
296.	
297.	always @(posedge clk or negedge rst_n) begin 
298.	    if (rst_n==0) begin
299.	        counter <= 0; 
300.	    end
301.	    else if(add_counter) begin
302.	        if(end_counter)
303.	            counter <= 0; 
304.	        else
305.	            counter <= counter+1 ;
306.	   end
307.	end
308.	assign add_counter = 1;
309.	assign end_counter = add_counter  && counter == COUNT_TIME-1 ;
310.	
311.	
312.	always @(posedge clk or negedge rst_n) begin 
313.	    if (rst_n==0) begin
314.	        second <= 0; 
315.	    end
316.	    else if(add_second) begin
317.	        if(end_second)
318.	            second <= 0; 
319.	        else
320.	            second <= second+1 ;
321.	   end
322.	end
323.	assign add_second = end_counter;
324.	assign end_second = add_second  && second == CYCLE_TIME-1 ;
325.	
326.	
327.	always @(posedge clk or negedge rst_n) begin 
328.	    if (rst_n==0) begin
329.	        ew_state_c <= STA_G ;
330.	    end
331.	    else begin
332.	        ew_state_c <= ew_state_n;
333.	   end
334.	end
335.	
336.	always @(*) begin 
337.	    case(ew_state_c)  
338.	        STA_G :begin
339.	            if(sta_g2sta_y_start_ew) 
340.	                ew_state_n = STA_Y ;
341.	            else 
342.	                ew_state_n = ew_state_c ;
343.	        end
344.	        STA_Y :begin
345.	            if(sta_y2sta_r_start_ew) 
346.	                ew_state_n = STA_R ;
347.	            else 
348.	                ew_state_n = ew_state_c ;
349.	        end
350.	        STA_R :begin
351.	            if(sta_r2sta_g_start_ew) 
352.	                ew_state_n = STA_G ;
353.	            else 
354.	                ew_state_n = ew_state_c ;
355.	        end
356.	        default : ew_state_n = STA_G ;
357.	    endcase
358.	end
359.	
360.	assign sta_g2sta_y_start_ew = ew_state_c==STA_G && add_second  && second == 10-1;
361.	assign sta_y2sta_r_start_ew = ew_state_c==STA_Y && add_second  && second == 15-1;
362.	assign sta_r2sta_g_start_ew = ew_state_c==STA_R && add_second  && second == 30-1;
363.	
364.	always  @(posedge clk or negedge rst_n)begin
365.	    if(rst_n==1'b0)begin
366.	        led_east<=GREEN; 
367.	    end
368.	    else if(ew_state_c==STA_G)begin
369.	        led_east<=GREEN;
370.	    end
371.	    else if(ew_state_c==STA_Y)begin
372.	        led_east<=YELLOW;
373.	    end
374.	    else if(ew_state_c==STA_R)begin
375.	        led_east<=RED;
376.	    end
377.	    else begin
378.	        led_east<=GREEN;
379.	    end
380.	end
381.	
382.	always  @(posedge clk or negedge rst_n)begin
383.	    if(rst_n==1'b0)begin
384.	        led_west<=GREEN; 
385.	    end
386.	    else if(ew_state_c==STA_G)begin
387.	        led_west<=GREEN;
388.	    end
389.	    else if(ew_state_c==STA_Y)begin
390.	        led_west<=YELLOW;
391.	    end
392.	    else if(ew_state_c==STA_R)begin
393.	        led_west<=RED;
394.	    end
395.	    else begin
396.	        led_west<=GREEN;
397.	    end
398.	end
399.	
400.	
401.	
402.	always @(posedge clk or negedge rst_n) begin 
403.	    if (rst_n==0) begin
404.	        sn_state_c <= STA_R ;
405.	    end
406.	    else begin
407.	        sn_state_c <= sn_state_n;
408.	   end
409.	end
410.	
411.	always @(*) begin 
412.	    case(sn_state_c)  
413.	        STA_R :begin
414.	            if(sta_r2sta_g_start_sn) 
415.	                sn_state_n = STA_G ;
416.	            else 
417.	                sn_state_n = sn_state_c ;
418.	        end
419.	        STA_G :begin
420.	            if(sta_g2sta_y_start_sn) 
421.	                sn_state_n = STA_Y ;
422.	            else 
423.	                sn_state_n = sn_state_c ;
424.	        end
425.	        STA_Y :begin
426.	            if(sta_y2sta_r_start_sn) 
427.	                sn_state_n = STA_R ;
428.	            else 
429.	                sn_state_n = sn_state_c ;
430.	        end
431.	        default : sn_state_n = STA_R ;
432.	    endcase
433.	end
434.	
435.	assign sta_r2sta_g_start_sn = sn_state_c==STA_R && add_second  && second == 15-1;
436.	assign sta_g2sta_y_start_sn = sn_state_c==STA_G && add_second  && second == 25-1;
437.	assign sta_y2sta_r_start_sn = sn_state_c==STA_Y && add_second  && second == 30-1;
438.	
439.	always  @(posedge clk or negedge rst_n)begin
440.	    if(rst_n==1'b0)begin
441.	        led_south<=RED; 
442.	    end
443.	    else if(sn_state_c==STA_G)begin
444.	        led_south<=GREEN;
445.	    end
446.	    else if(sn_state_c==STA_Y)begin
447.	        led_south<=YELLOW;
448.	    end
449.	    else if(sn_state_c==STA_R)begin
450.	        led_south<=RED;
451.	    end
452.	    else begin
453.	        led_south<=GREEN;     
454.	    end
455.	end
456.	
457.	always  @(posedge clk or negedge rst_n)begin
458.	    if(rst_n==1'b0)begin
459.	        led_north<=RED; 
460.	    end
461.	    else if(sn_state_c==STA_G)begin
462.	        led_north<=GREEN;
463.	    end
464.	    else if(sn_state_c==STA_Y)begin
465.	        led_north<=YELLOW;
466.	    end
467.	    else if(sn_state_c==STA_R)begin
468.	        led_north<=RED;
469.	    end
470.	    else begin
471.	        led_north<=GREEN;   
472.	    end
473.	end
474.	
475.	endmodule
476.	




1.2 效果(guǒ)和(hé)總(zǒng)結


點(diǎn)撥板:


1. 複位,東(dōng)西(xī)綠(lǜ)燈(dēng)亮(liàng),南(nán)北(běi)紅(hóng)燈(dēng)亮(liàng)

「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2

2. 10秒(miǎo)後(hòu),東(dōng)西(xī)黃燈(dēng)亮(liàng),南(nán)北(běi)還(huán)是(shì)紅(hóng)燈(dēng)亮(liàng)

「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2

3. 15秒(miǎo)後(hòu),東(dōng)西(xī)紅(hóng)燈(dēng)亮(liàng),南(nán)北(běi)綠(lǜ)燈(dēng)亮(liàng)

「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2

4. 20秒(miǎo)後(hòu)。東(dōng)西(xī)還(huán)是(shì)紅(hóng)燈(dēng)亮(liàng),南(nán)北(běi)黃燈(dēng)亮(liàng)

「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2

5. 30秒(miǎo)後(hòu),東(dōng)西(xī)綠(lǜ)燈(dēng)亮(liàng),南(nán)北(běi)紅(hóng)燈(dēng)亮(liàng)

「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2

Mp801:


1. 複位,東(dōng)西(xī)綠(lǜ)燈(dēng)亮(liàng),南(nán)北(běi)紅(hóng)燈(dēng)亮(liàng)

「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2

2. 10秒(miǎo)後(hòu),東(dōng)西(xī)黃燈(dēng)亮(liàng),南(nán)北(běi)還(huán)是(shì)紅(hóng)燈(dēng)亮(liàng)

「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2

3. 15秒(miǎo)後(hòu),東(dōng)西(xī)紅(hóng)燈(dēng)亮(liàng),南(nán)北(běi)綠(lǜ)燈(dēng)亮(liàng)

「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2

4. 20秒(miǎo)後(hòu)。東(dōng)西(xī)還(huán)是(shì)紅(hóng)燈(dēng)亮(liàng),南(nán)北(běi)黃燈(dēng)亮(liàng)

「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2

5. 30秒(miǎo)後(hòu),東(dōng)西(xī)綠(lǜ)燈(dēng)亮(liàng),南(nán)北(běi)紅(hóng)燈(dēng)亮(liàng)

「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2


实验(yàn)箱:


1. 複位,東(dōng)西(xī)綠(lǜ)燈(dēng)亮(liàng),南(nán)北(běi)紅(hóng)燈(dēng)亮(liàng)

「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2

2. 10秒(miǎo)後(hòu),東(dōng)西(xī)黃燈(dēng)亮(liàng),南(nán)北(běi)還(huán)是(shì)紅(hóng)燈(dēng)亮(liàng)

「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2

3. 15秒(miǎo)後(hòu),東(dōng)西(xī)紅(hóng)燈(dēng)亮(liàng),南(nán)北(běi)綠(lǜ)燈(dēng)亮(liàng)

「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2

4. 20秒(miǎo)後(hòu)。東(dōng)西(xī)還(huán)是(shì)紅(hóng)燈(dēng)亮(liàng),南(nán)北(běi)黃燈(dēng)亮(liàng)

「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2

5. 30秒(miǎo)後(hòu),東(dōng)西(xī)綠(lǜ)燈(dēng)亮(liàng),南(nán)北(běi)紅(hóng)燈(dēng)亮(liàng)

「每周FPGA案(àn)例」狀态機(jī)实現(xiàn)的(de)LED交通(tòng)燈(dēng)2

观看(kàn)上(shàng)面(miàn)的(de)現(xiàn)象(xiàng),可(kě)以(yǐ)發(fà)現(xiàn),各(gè)項功能(néng)正(zhèng)常:開(kāi)發(fà)板上(shàng)有(yǒu)紅(hóng)黃綠(lǜ)三(sān)色(sè) LED 燈(dēng)各(gè)四(sì)个(gè),在(zài)東(dōng)西(xī)南(nán)北(běi)方(fāng)向(xiàng)各(gè)有(yǒu)一(yī)組。參考交通(tòng)燈(dēng)的(de)情(qíng)況,即每个(gè)方(fāng)向(xiàng)都是(shì)綠(lǜ)燈(dēng)亮(liàng) 10 秒(miǎo),然後(hòu)黃燈(dēng)亮(liàng) 5 秒(miǎo),然後(hòu)紅(hóng)燈(dēng)亮(liàng) 15 秒(miǎo)。綠(lǜ)燈(dēng)按照東(dōng)西(xī)和(hé)南(nán)北(běi)的(de)順序依次(cì)亮(liàng)。成(chéng)功完成(chéng)設計(jì)目标(biāo)。

温(wēn)馨提(tí)示:明(míng)德揚2023推出(chū)了(le)全(quán)新課程——邏輯設計(jì)基本(běn)功修煉課,降低学習FPGA門(mén)檻的(de)同(tóng)时(shí),增加了(le)学習的(de)趣味性(xìng),并組織了(le)考試赢積分(fēn)活動(dòng)

http://www.minyingyiyuan.com/ffkc/415.html

(點(diǎn)擊→了(le)解(jiě)課程詳情(qíng)☝)感(gǎn)興趣請聯系(xì)易老(lǎo)师(shī):13112063618(微信(xìn)同(tóng)步)



本(běn)文(wén)TAG:

Copyright © 2012-2023 版權所(suǒ)有(yǒu):深圳明(míng)德揚科技教育有(yǒu)限公司

粵ICP備17036451号(hào) 穗公网(wǎng)安(ān)備:44010650010086

⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨