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,應該可以用右移來實驗。