HDLBits状态机练习题目 water reservoir蓄水池控制器
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蓄水池控制器相关推荐
- HDLBits 状态机练习题目 water reservoir 蓄水池控制器
Also include an active-high synchronous reset that resets the state machine to a state equivalent to ...
- HDLBits 系列(38)值得一看的状态机设计题目
目录 背景 原题复现 我的方案 状态转移图 我的设计 更新方案 FPGA/IC群推荐 背景 这是这个系列中的一个状态机的题目,但是相比于给了你完整状态转移图之类的题目,这个题目还是稍微有点难的,我实在 ...
- HDLBits 系列(44)状态机补录
文章目录 前言 原题复现 题目解析 状态转移图 设计文件 前言 今天补一个状态机的题目,也是这个系列的题目之一,但是由于之前对题目有点疑惑,今天得到博友反馈,让我明白了这个题目的意思,记录一下. 原题 ...
- 46家中外知名企业笔试面试题目
http://blog.sina.com.cn/s/blog_4897add3010009wj.html 微软 智力题 1.烧一根不均匀的绳子,从头烧到尾总共需要1个小时,问如何用烧绳子的方法来确 定 ...
- 46家中外知名企业面试题目
46家中外知名企业面试题目 <script src="http://blog.csdn.net/count.aspx?ID=1404124&Type=Rank" ...
- HDLBits 系列(0)专题目录
本篇博文是近来总结HDLBits系列的目录,点击蓝色字体即可进入查看具体内容. HDLBits 系列(1)从HDLBits中获取灵感,整顿自己,稳步前行 HDLBits 系列(2)如何避免生成锁存器? ...
- 各大公司应聘电子类题目精选
模拟电路 1. 基尔霍夫定理的内容是什么?(仕兰微电子) 基尔霍夫电流定律是一个电荷守恒定律,即在一个电路中流入一个节点的电荷与流出同一个节点的电荷相等. 基尔霍夫电压定律是一个能量守恒定律,即在一 ...
- 16路彩灯控制器 FPGA-Verilog
#16路彩灯控制器 FPGA-Verilog# 1.Verilog代码编写 1.1输入输出信号确定 题目要求多路彩灯控制器通过对应的开关按钮,能够控制多个彩灯的输出状态,组合多种变幻的灯光效果. 彩灯 ...
- 各大公司硬件面试题目
各大公司的硬件笔试题 f) 画出微机接口电路中,典型的输入设备与微机接口逻辑示意图(数据接口.控制接口.所存器/缓冲器) 3. 设想你将设计完成一个电子电路方案.请简述用EDA软件(如PROTEL)进 ...
最新文章
- python之⾯向对象基础
- Ionic 4.3.0 发布,移动应用开发框架
- spring18:aop介绍
- Java - String源码解析及常见面试问题
- elasticsearch5安装和elasticsearch-analysis-ik中文分词插件安装
- Java修炼之路——基础篇——数据类型
- corosync+openais+pacemaker+web
- java imapi_读写DVD / CD-Java
- 【架构】Heartbeat高可用服务(2)
- 左对齐 latex_初学者关于Latex的一些总结(持续更新中...)
- 【C语言】------ 实现三子棋
- 2022年流行的Java框架有哪些?
- P1357 食物链(一)
- 微信的隐藏功能竟然可以一秒获取好友位置!这到底是神马操作
- JAVA泛型通配符T,E,K,V区别,T以及ClassT,ClassT的区别
- 卫生专业计算机考试,快熟悉一下2019卫生专业技术资格考试人机对话系统
- Remote Server returned '420 4.2.0 Recipient deferred because there is no Mdb'
- SQL Server 2012 最新技术 PowerView 让你的业务会说话 [上篇]
- 【JZOJ4117】lhxsb(三角函数+凸壳+CDQ分治)
- CF28B pSort 解题报告
热门文章
- uniCloud 云函数操作云数据库
- 用Java实现简单的画画画板
- 2022年充电宝品牌排行榜,2022年充电宝推荐
- 第12周 立方累加和
- 安卓通讯录管理软件_细说|安卓系统50个你不知道的使用窍门!每个都值得你去收藏!...
- simhash算法和余弦相似度算法哪种更适合微博文本的相似度计算
- 如何将生活中所记录的收入、支出详细收支打印出来
- pyinstaller打包exe(32位和64位)和运行太慢等问题解决
- 说词——浣溪沙 苏轼
- 三轴桁架机械手上下料程序,用西门子smart200 ST40 脉冲控制3轴伺服程序,触摸屏程序,详细注释