習題8 #第8章 Verilog有限狀態機設計-3 #Verilog #Quartus #modelsim


3. 編寫一個8路彩燈控制程序,要求彩燈有以下3種演示花型。

(1) 8路彩燈同時亮滅;

(2) 從左至右逐個亮(每次只有1路亮);

(3) 8路彩燈每次4路燈亮,4路燈滅,且亮滅相間,交替亮滅。

在演示過程中,只有當一種花型演示完畢才能轉向其他演示花型。

 

3.1 設計思路:8個燈,3種花型,順序展示。窮舉法。8個燈的所有花型狀態,共計有:亮滅2種,

                       逐個亮8種,4亮4滅交替2種。即:8'b0000_0000,

                                                                              8'b1111_1111,

                                                                              8'b1000_0000,

                                                                              ... ...

                      共12種狀態。

3.2 8路彩燈,3種花型,控制電路源碼:

 

 1 // 8-bit light and 3 shows
 2 //2020-10-13 
 3 // by YongFengXie
 4 module ex8_3(clk,rst_n,lamb);
 5 input clk;
 6 input rst_n;
 7 output reg [7:0] lamb;
 8 
 9 reg [3:0] state;
10 
11 parameter s0=4'b0000,
12           s1=4'b0001,
13           s2=4'b0011,
14           s3=4'b0010,
15           s4=4'b0110,
16           s5=4'b0111,
17           s6=4'b0101,
18           s7=4'b0100,
19           s8=4'b1100,
20           s9=4'b1101,
21           s10=4'b1111,
22           s11=4'b1110;
23 
24 always @(posedge clk or negedge rst_n)
25 begin
26   if(!rst_n)
27     begin
28       state<=s0;
29       lamb<=8'b0000_0000; // all off
30     end
31   else
32     begin
33       case(state)
34         s0:begin                 // 1 mode
35              state<=s1;
36              lamb<=8'b0000_0000; // all off
37            end
38         s1:begin
39              state<=s2;
40              lamb<=8'b1111_1111; // all on
41            end
42         s2:begin                 // 2 mode
43              state<=s3;
44              lamb<=8'b1000_0000; // 1st on(from left to right)
45            end
46         s3:begin
47              state<=s4;
48              lamb<=8'b0100_0000; // 2nd on
49            end
50         s4:begin
51              state<=s5;
52              lamb<=8'b0010_0000; // 3rd on(from left to right)
53            end
54         s5:begin
55              state<=s6;
56              lamb<=8'b0001_0000; // 4th on
57            end
58         s6:begin
59              state<=s7;
60              lamb<=8'b0000_1000; // 5th on
61            end
62         s7:begin
63              state<=s8;
64              lamb<=8'b0000_0100; // 6th on
65            end
66         s8:begin
67              state<=s9;
68              lamb<=8'b0000_0010; // 7th on
69            end
70         s9:begin
71              state<=s10;
72              lamb<=8'b0000_0001; // 8th on
73            end
74         s10:begin                // 3 mode
75              state<=s11;
76              lamb<=8'b0101_0101; // 4 on 4 off
77            end
78         s11:begin
79              state<=s0;
80              lamb<=8'b1010_1010; // 4 on 4 off
81            end
82         default:begin
83                   state<=s0;
84                   lamb<=8'b0000_0000; 
85                 end
86       endcase
87     end
88 end
89 
90 endmodule

 

 

3.3 8路彩燈3種花型測試代碼:

 1 //ex8_3 testbench
 2 //2020-10-13 
 3 // by YongFengXie
 4 `timescale 1ns/1ns
 5 module ex8_3tb;
 6 reg clk;
 7 reg rst_n;
 8 wire [7:0] lamb;
 9 
10 initial begin
11           clk=1'b0;
12           rst_n=1'b0;
13           #40 rst_n=1'b1;
14           #200 $stop;
15         end
16 
17 always #5 clk=~clk;
18 
19 ex8_3 ub(clk,rst_n,lamb);
20 
21 endmodule

 

3.4  8路彩燈3種花型控制電路的仿真結果如圖ex8_3_1所示:

               圖ex8_3_1 8路彩燈控制電路仿真結果

 

3.5 8路彩燈控制電路狀態轉化圖如圖ex8_3_2所示:

                         圖ex8_3_2  8路彩燈控制電路狀態轉換圖

 

3.6 總結:8路彩燈花型顯示的控制電路采用了窮舉法來規划12種狀態。其中3種演示模式自動按順序循環演示,可添加模式控制端口,手動切換不同模式。這里投機,省略。其實就是if else。另外,模式2,應該可以用右移來實驗。                                    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM