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).
HDLBits具体链接:添加链接描述
题目的大致翻译为:一个蓄水池供几个用户使用。为了保持足够高的水位,三个传感器以5英寸的间隔垂直放置。当水位高于最高传感器S3,输入流量应该为0。当液位低于最低传感器S1时,流量应该达到最大(公称流量阀和补充流量阀都打开)。当水位处于上下传感器之间时,流量由两个因素决定:水位和上一次传感器变化前的水位。每个水位都有一个与之相关的额定流量,如下表所示。如果传感器的变化表明先前的液位低于当前的液位,则应该采用标称流量。如果之前的液位高于当前的液位,应该通过打开辅助流量阀(由dfr控制)来增加流量。绘制蓄水池控制器的摩尔模型状态图。清楚的指示所有状态转换和每个状态的输出。输入到FSM的是s1,s2,s3;输出为fr1,fr2,fr3和dfr

module top_module (input clk,input reset,input [3:1] s,output fr3,output fr2,output fr1,output dfr
); endmodule

根据题目可以将水位分为4个状态,4个状态分别表示不一样的水位,s[1]、s[2]、s[3]表示传感器,3个传感器都亮表示水位到达S3以上,即状态S3;s[1]和s[2]传感器亮,表示水位在S2-S3,状态S2;如此类推可以得到状态S1和状态S0。根据表格可以得知,这是一个摩尔状态机,输出只与当前状态相关。由此可以得知输出fr1、fr2和fr3仅仅取决于当前状态,其具体输出可以根据上述表格得知。而输出dfr处于高电平的状态只有两种:一是处于S0状态,即最低水位状态,二是下一个状态的水位低于当前水位时,因此dfr的输出可以如下所示进行设置

     reg state_lower;always@(posedge    clk)beginif(reset||present_state<next_state)state_lower  <=  1'b0;else  if(present_state>next_state)state_lower  <=  1'b1;endassign dfr =  (present_state==S0)||(state_lower);

得到输出的关系之后,最重要的就是各个状态之间的转换,而各个状态之间的转换则是根据3个传感器来变化,也就是3个输入s[3:1],以下是我根据自己理解画出的状态转换图:

各个状态的转换根据传感器进行得到,具体状态转换代码如下所示:

always@(*)begincase(present_state)S0:beginif(s[1]&&(~s[2])&&(~s[3]))next_state  =  S1;else next_state  =  S0;endS1:beginif(s[1]==1&&s[2]==1&&s[3]==0)next_state =  S2;else if(s[1]==1&&s[2]==0&&s[3]==0)next_state   =  S1;elsenext_state   =  S0;endS2:beginif(s[1]==1&&s[2]==1&&s[3]==1)next_state =  S3;else if(s[1]==1&&s[2]==0&&s[3]==0)next_state   =  S1;elsenext_state   =  S2;endS3:beginif(s[1]==1&&s[2]==1&&s[3]==1)next_state =  S3;elsenext_state   =  S2;endendcaseend

全部代码如下(仅供参考):

module top_module (input clk,input reset,input [3:1] s,output fr3,output fr2,output fr1,output dfr
); parameter    S0=4'd1,S1=4'd2,S2=4'd4,S3=4'd8;reg [3:0]   present_state,next_state;//state    transition logicalways@(*)begincase(present_state)S0:beginif(s[1]&&(~s[2])&&(~s[3]))next_state =  S1;else next_state  =  S0;endS1:beginif(s[1]==1&&s[2]==1&&s[3]==0)next_state =  S2;else if(s[1]==1&&s[2]==0&&s[3]==0)next_state   =  S1;elsenext_state   =  S0;endS2:beginif(s[1]==1&&s[2]==1&&s[3]==1)next_state =  S3;else if(s[1]==1&&s[2]==0&&s[3]==0)next_state   =  S1;elsenext_state   =  S2;endS3:beginif(s[1]==1&&s[2]==1&&s[3]==1)next_state =  S3;elsenext_state   =  S2;endendcaseendalways@(posedge    clk)if(reset)present_state  <=  S0;elsepresent_state    <=  next_state;reg  state_lower;always@(posedge    clk)beginif(reset||present_state<next_state)state_lower  <=  1'b0;else  if(present_state>next_state)state_lower  <=  1'b1;endassign dfr =  (present_state==S0)||(state_lower);always@(*)beginif(present_state   ==    S0)begin{fr3,fr2,fr1}=3'b111; endelse if(present_state    ==    S1)begin{fr3,fr2,fr1}=3'b011; endelse if(present_state    ==    S2)begin{fr3,fr2,fr1}=3'b001; endelse if(present_state    ==    S3)begin{fr3,fr2,fr1}=3'b0; endendendmodule

具体参考文章内容:

添加链接描述
添加链接描述

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. python之⾯向对象基础
  2. Ionic 4.3.0 发布,移动应用开发框架
  3. spring18:aop介绍
  4. Java - String源码解析及常见面试问题
  5. elasticsearch5安装和elasticsearch-analysis-ik中文分词插件安装
  6. Java修炼之路——基础篇——数据类型
  7. corosync+openais+pacemaker+web
  8. java imapi_读写DVD / CD-Java
  9. 【架构】Heartbeat高可用服务(2)
  10. 左对齐 latex_初学者关于Latex的一些总结(持续更新中...)
  11. 【C语言】------ 实现三子棋
  12. 2022年流行的Java框架有哪些?
  13. P1357 食物链(一)
  14. 微信的隐藏功能竟然可以一秒获取好友位置!这到底是神马操作
  15. JAVA泛型通配符T,E,K,V区别,T以及ClassT,ClassT的区别
  16. 卫生专业计算机考试,快熟悉一下2019卫生专业技术资格考试人机对话系统
  17. Remote Server returned '420 4.2.0 Recipient deferred because there is no Mdb'
  18. SQL Server 2012 最新技术 PowerView 让你的业务会说话 [上篇]
  19. 【JZOJ4117】lhxsb(三角函数+凸壳+CDQ分治)
  20. CF28B pSort 解题报告

热门文章

  1. uniCloud 云函数操作云数据库
  2. 用Java实现简单的画画画板
  3. 2022年充电宝品牌排行榜,2022年充电宝推荐
  4. 第12周 立方累加和
  5. 安卓通讯录管理软件_细说|安卓系统50个你不知道的使用窍门!每个都值得你去收藏!...
  6. simhash算法和余弦相似度算法哪种更适合微博文本的相似度计算
  7. 如何将生活中所记录的收入、支出详细收支打印出来
  8. pyinstaller打包exe(32位和64位)和运行太慢等问题解决
  9. 说词——浣溪沙 苏轼
  10. 三轴桁架机械手上下料程序,用西门子smart200 ST40 脉冲控制3轴伺服程序,触摸屏程序,详细注释