习题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,应该可以用右移来实验。