Also include an active-high synchronous reset that resets the state machine to a state equivalent to if the water level had been low for a long time (no sensors asserted, and all four outputs asserted).

题目地址:Exams/ece241 2013 q4 - HDLBits

文章目录

  • 一、不用状态机
  • 二、官方给的参考答案
  • 三、自己写的状态机
  • 三种方法的比较 Vivado
    • 不用状态机
    • 参考答案的状态机
    • 自己写的状态机
  • 三种方法的比较 Quartus
    • 不用状态机
    • 参考答案的状态机
    • 自己写的状态机

一、不用状态机

我觉得不用状态机是比较简单的,只不过要多费点脑子,我是画状态图时想出来的。

module top_module (input clk,input reset,input [3:1] s,output reg fr3,output reg fr2,output reg fr1,output reg dfr
); always @(posedge clk) beginif (reset == 1'b1){fr1, fr2, fr3} <= 3'b111;else beginfr1 <= (s == 3'b000) | (s == 3'b001) | (s == 3'b011);fr2 <= (s == 3'b000) | (s == 3'b001);fr3 <= (s == 3'b000);end
endreg [3:1] s_prev; // 记录之前的水位
always @(posedge clk) beginif (reset == 1'b1)s_prev <= 3'b000;elses_prev <= s;
end// 水位越高,s越大
// 之前的水位比现在的水位高,则dfr打开
always @(posedge clk) beginif (reset == 1'b1)dfr <= 1'b1;elsedfr <= (s_prev > s) ? 1'b1 :(s_prev < s) ? 1'b0 : dfr;
endendmodule

二、官方给的参考答案

module top_module (input clk,input reset,input [3:1] s,output reg fr3,output reg fr2,output reg fr1,output reg dfr
);// Give state names and assignments. I'm lazy, so I like to use decimal numbers.// It doesn't really matter what assignment is used, as long as they're unique.// We have 6 states here.parameter A2=0, B1=1, B2=2, C1=3, C2=4, D1=5;reg [2:0] state, next;      // Make sure these are big enough to hold the state encodings.// Edge-triggered always block (DFFs) for state flip-flops. Synchronous reset.    always @(posedge clk) beginif (reset) state <= A2;else state <= next;end// Combinational always block for state transition logic. Given the current state and inputs,// what should be next state be?// Combinational always block: Use blocking assignments.    always@(*) begincase (state)A2: next = s[1] ? B1 : A2;B1: next = s[2] ? C1 : (s[1] ? B1 : A2);B2: next = s[2] ? C1 : (s[1] ? B2 : A2);C1: next = s[3] ? D1 : (s[2] ? C1 : B2);C2: next = s[3] ? D1 : (s[2] ? C2 : B2);D1: next = s[3] ? D1 : C2;default: next = 'x;endcaseend// Combinational output logic. In this problem, a procedural block (combinational always block) // is more convenient. Be careful not to create a latch.always@(*) begincase (state)A2: {fr3, fr2, fr1, dfr} = 4'b1111;B1: {fr3, fr2, fr1, dfr} = 4'b0110;B2: {fr3, fr2, fr1, dfr} = 4'b0111;C1: {fr3, fr2, fr1, dfr} = 4'b0010;C2: {fr3, fr2, fr1, dfr} = 4'b0011;D1: {fr3, fr2, fr1, dfr} = 4'b0000;default: {fr3, fr2, fr1, dfr} = 'x;endcaseendendmodule

三、自己写的状态机

对比一下状态图可以发现,其实差不多,的确参考答案更精简一点。

module top_module (input clk,input reset,input [3:1] s,output reg fr3,output reg fr2,output reg fr1,output reg dfr
); parameter START = 3'd0, W1 = 3'd1, W2 = 3'd2, W3 = 3'd3, W4 = 3'd4, W5 = 3'd5, W6 = 3'd6, W7 = 3'd7;reg [2:0] curr_state, next_state;always @(posedge clk) beginif (reset == 1'b1)curr_state <= START;elsecurr_state <= next_state;
endalways @(*) begincase (curr_state)START: next_state = (s == 3'b000) ? W1 :(s == 3'b001) ? W2 :(s == 3'b011) ? W3 :(s == 3'b111) ? W4 : START;W1: next_state = (s == 3'b001) ? W2 : W1;W2: next_state = (s == 3'b011) ? W3 : (s == 3'b000) ? W5 : W2;W3: next_state = (s == 3'b111) ? W4 : (s == 3'b001) ? W6 : W3;W4: next_state = (s == 3'b011) ? W7 : W4;W5: next_state = (s == 3'b001) ? W2 : W5;W6: next_state = (s == 3'b011) ? W3 :(s == 3'b000) ? W5 : W6;W7: next_state = (s == 3'b111) ? W4 : (s == 3'b001) ? W6 : W7;endcase
endalways @(*) begincase (curr_state)START: {fr3, fr2, fr1, dfr} = 4'b1111;W1: {fr3, fr2, fr1, dfr} = 4'b1110;W2: {fr3, fr2, fr1, dfr} = 4'b0110;W3: {fr3, fr2, fr1, dfr} = 4'b0010;W4: {fr3, fr2, fr1, dfr} = 4'b0000;W5: {fr3, fr2, fr1, dfr} = 4'b1111;W6: {fr3, fr2, fr1, dfr} = 4'b0111;W7: {fr3, fr2, fr1, dfr} = 4'b0011;endcase
end
endmodule

三种方法的比较 Vivado

不用状态机

elab电路图(综合的电路图可读性差)

综合出的资源占用情况

参考答案的状态机


自己写的状态机


结论:对比综合后的资源占用,好像都差不多的样子。LUT/FF的数量分别是 5/7, 6/6, 7/3

三种方法的比较 Quartus

不用状态机

参考答案的状态机

Quartus的RTL Viewer把状态机单独识别出来,很贴心了。

自己写的状态机

结论:Quartus综合结果和Vivado的差别蛮大的。我自己的状态机比较糟糕,不用状态机最好。

HDLBits 状态机练习题目 water reservoir 蓄水池控制器相关推荐

  1. HDLBits状态机练习题目 water reservoir蓄水池控制器

    Also include an active-high synchronous reset that resets the state machine to a state equivalent to ...

  2. HDLBits 系列(38)值得一看的状态机设计题目

    目录 背景 原题复现 我的方案 状态转移图 我的设计 更新方案 FPGA/IC群推荐 背景 这是这个系列中的一个状态机的题目,但是相比于给了你完整状态转移图之类的题目,这个题目还是稍微有点难的,我实在 ...

  3. HDLBits 系列(44)状态机补录

    文章目录 前言 原题复现 题目解析 状态转移图 设计文件 前言 今天补一个状态机的题目,也是这个系列的题目之一,但是由于之前对题目有点疑惑,今天得到博友反馈,让我明白了这个题目的意思,记录一下. 原题 ...

  4. 46家中外知名企业笔试面试题目

    http://blog.sina.com.cn/s/blog_4897add3010009wj.html 微软 智力题 1.烧一根不均匀的绳子,从头烧到尾总共需要1个小时,问如何用烧绳子的方法来确 定 ...

  5. 46家中外知名企业面试题目

    46家中外知名企业面试题目    <script src="http://blog.csdn.net/count.aspx?ID=1404124&Type=Rank" ...

  6. HDLBits 系列(0)专题目录

    本篇博文是近来总结HDLBits系列的目录,点击蓝色字体即可进入查看具体内容. HDLBits 系列(1)从HDLBits中获取灵感,整顿自己,稳步前行 HDLBits 系列(2)如何避免生成锁存器? ...

  7. 各大公司应聘电子类题目精选

    模拟电路 1.  基尔霍夫定理的内容是什么?(仕兰微电子) 基尔霍夫电流定律是一个电荷守恒定律,即在一个电路中流入一个节点的电荷与流出同一个节点的电荷相等. 基尔霍夫电压定律是一个能量守恒定律,即在一 ...

  8. 16路彩灯控制器 FPGA-Verilog

    #16路彩灯控制器 FPGA-Verilog# 1.Verilog代码编写 1.1输入输出信号确定 题目要求多路彩灯控制器通过对应的开关按钮,能够控制多个彩灯的输出状态,组合多种变幻的灯光效果. 彩灯 ...

  9. 各大公司硬件面试题目

    各大公司的硬件笔试题 f) 画出微机接口电路中,典型的输入设备与微机接口逻辑示意图(数据接口.控制接口.所存器/缓冲器) 3. 设想你将设计完成一个电子电路方案.请简述用EDA软件(如PROTEL)进 ...

最新文章

  1. 如何使用idea REST Clinet 代替PostMan发送Http请求
  2. springBoot第二数据源访问dao 报BindingException: Invalid bound statement(not found)
  3. 人生第一次手术:0817
  4. elk-logstash时区问题
  5. 【蓝桥杯】基础练习 特殊回文数
  6. DCMTK:使用dcmsr API创建示例结构化报告
  7. CCIE-LAB-第八篇-SDWAN-Branch1_Branch2_Vmanage
  8. bzoj4448 SCOI2015 情报传递 message
  9. FFmpeg源代码简单分析:常见结构体的初始化和销毁(AVFormatContext,AVFrame等)
  10. 表格数据的识别与提取
  11. 浙江独立学院计算机专业排名2015,2014-2015年中国独立学院排名
  12. Dynamics CRM 2015中的SSRS Report集成配置
  13. C#通过正则表达式判断字符是否为数字
  14. NSGA2算法MATLAB
  15. python_类装饰器
  16. (一)使用 Sliced Sprite 制作 UI 图像
  17. 杭电ACM 2014:青年歌手大奖赛_评委会打分
  18. 中国科技技术大学潘建伟计算机,中国研制量子计算机“九章” 比超级计算机快一百万亿倍...
  19. 魔兽争霸3的MapHack制作教程(二)去除战争迷雾
  20. 【dht】dht简介以及使用nodejs查找dht网络学习笔记

热门文章

  1. 狂神Elasticsearch笔记
  2. 摩根大通区块链支付网络计划于1月日本启动
  3. oracle权限培训,【必看】Oracle用户、权限、角色管理
  4. 关于RSA加密后,后台解密中文乱码的解决方法
  5. YAML实践指南:3:YAML格式检查与转换
  6. 诊所数字化:诊所医护人员绩效指标评估方式
  7. linux4.4 内核 netlink,wpa_supplicant与内核nl80211通信之Generic Netlink
  8. Java 对图片进行大小转换
  9. 致敬司徒!avalon例子学习
  10. kali linux nmap扫描(二)_商洛学院司徒荆_新浪博客