zoukankan      html  css  js  c++  java
  • 习题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,应该可以用右移来实验。                                    

  • 相关阅读:
    python如何进行内存管理的
    多进程于多线程的区别,cpu密集型适合用什么
    __new__() 与__init__()的区别
    orm的理解
    三次握手四次挥手
    HTTP、TCP、IP、协议
    mysql字段添加修改删除
    django本身提供了runserver,为什么不能用来部署(runserver与uWSGI的区别)
    django中scrf的实现机制
    django重定向是如何实现的,用的什么状态码?
  • 原文地址:https://www.cnblogs.com/halflife/p/13812254.html
Copyright © 2011-2022 走看看