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

习题8 #第8章 Verilog有限状态机设计-3 #Verilog #Quartus #modelsim的更多相关文章

  1. [Python学习笔记][第五章Python函数设计与使用]

    2016/1/29学习内容 第四章 Python函数设计与使用 之前的几页忘记保存了 很伤心 变量作用域 -一个变量已在函数外定义,如果在函数内需要修改这个变量的值,并将这个赋值结果反映到函数之外,可 ...

  2. 《.NET 设计规范》第 5 章:成员设计

    <.NET 设计规范>第 5 章:成员设计 5.1 成员设计的通用规范 要尽量用描述性的参数名来说明在较短的重载中使用的默认值. 避免在重载中随意地改变参数的名字.如果两个重载中的某个参数 ...

  3. MySQL性能调优与架构设计——第 18 章 高可用设计之 MySQL 监控

    第 18 章 高可用设计之 MySQL 监控 前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一 ...

  4. MySQL性能调优与架构设计——第 17 章 高可用设计之思路及方案

    第 17 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库 ...

  5. MySQL性能调优与架构设计——第12章 可扩展设计的基本原则

    第12章 可扩展设计的基本原则 前言: 随着信息量的飞速增加,硬件设备的发展已经慢慢的无法跟上应用系统对处理能力的要求了.此时,我们如何来解决系统对性能的要求?只有一个办法,那就是通过改造系统的架构体 ...

  6. 《C++Primer》第五版习题答案--第三章【学习笔记】

    [C++Primer]第五版[学习笔记]习题解答第三章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/10 第三章:字符串,向量和数组 ...

  7. 《C++Primer》第五版习题解答--第四章【学习笔记】

    [C++Primer]第五版习题解答--第四章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/11 第四章:表达式 练习4. ...

  8. 《C++Primer》第五版习题答案--第五章【学习笔记】

    <C++Primer>第五版习题答案--第五章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/15 第五章:语句 ...

  9. 《C++Primer》第五版习题答案--第六章【学习笔记】

    <C++Primer>第五版习题答案--第六章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/16 第六章:函数 ...

  10. FPGA Prototyping By Verilog Examples第五章 状态机FSM设计

    上升沿检测电路之Moore型FSM // Listing 5.3module edge_detect_moore ( input wire clk, reset, input wire level, ...

随机推荐

  1. es通过时间聚合查询一周中每天的数据平均值

    场景回顾:设备上传的数据保存在es中,大屏模块要统计本周的数据折线图(一个设备三分总上传一次,所以拟定每天聚合求个平均值) kibana查询请求 GET xxxx_2022-10/_search { ...

  2. DW:优化目标检测训练过程,更全面的正负权重计算 | CVPR 2022

    论文提出自适应的label assignment方法DW,打破了以往耦合加权的惯例.根据不同角度的一致性和非一致性指标,动态地为anchor分配独立的pos权重和neg权重,可以更全面地监督训练.此外 ...

  3. Collation 差异导致 KingbaseES 与 Oracle 查询结果不同

    问题引入 前端提了个问题,说是KingbaseES 返回的结果与 Oracle 返回的结果不一样.具体问题如下: oracle 执行结果:oracle 有结果返回. SQL> create ta ...

  4. sys_stat_statements 扩展使用介绍

    sys_stat_statements 模块提供追踪服务器所执行的所有SQL语句的执行统计信息,可以用于统计数据库的资源开销,如分析TOP SQL. KingbaseES V8R6版本该插件已经内置化 ...

  5. Fast多维数组

    #include<iostream> #include<chrono> struct Timer { std::chrono::time_point<std::chron ...

  6. #Kruskal,分治#AT4569 Connecting Cities

    题目传送门 考虑如何去掉这个绝对值, 换句话说,如何减少边数并且能建出 MST. 在求解偏序问题时,往往会分而治之, 这样原来 \(O(n^2)\) 的做法就能够被优化. 考虑将所有点对半折开, 左半 ...

  7. 【Kotlin】类和对象

    1 前言 ​ Kotlin 是面向对象编程语言,与 Java 语言类似,都有类.对象.属性.构造函数.成员函数,都有封装.继承.多态三大特性,不同点如下. Java 有静态(static)代码块,Ko ...

  8. Response下载文件

    Response下载文件的主要步骤有七个: 1.要获取下载文件的路径 String realPath = "F:\\JavaWeb\\WorkSpace\\JavaWeb-Servlet\\ ...

  9. Servlet和springMVC

    什么是Servlet? Servlet是使用Java语言编写的运行在服务器端的程序.狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一 ...

  10. 开源数据库OpenGauss的SQL解析源码分析

    开源数据库 OpenGauss 的 SQL 解析源码分析 OpenGauss 数据库体系概述 openGauss 是关系型数据库,采用客户端/服务器,单进程多线程架构:支持单机和一主多备部署方式,同时 ...