当前位置: 首页 > news >正文

Verilog刷题笔记57

题目:
Exams/2014 q3bfsm
Given the state-assigned table shown below, implement the finite-state machine. Reset should reset the FSM to state 000.
在这里插入图片描述
解题:

module top_module (input clk,input reset,   // Synchronous resetinput x,output z
);parameter s0=3'd000,s1=3'd001,s2=3'd010,s3=3'd011,s4=3'd100;reg [2:0]state,next_state;always@(posedge clk)beginif(reset)state=s0;elsestate=next_state;endalways@(*)begincase(state)s0:next_state=x?s1:s0;s1:next_state=x?s4:s1;s2:next_state=x?s1:s2;s3:next_state=x?s2:s1;s4:next_state=x?s4:s3;endcaseendalways@(posedge clk)beginif(reset)z=0;else begincase(next_state)s0:z=0;s1:z=0;s2:z=0;s3:z=1;s4:z=1;default:z=0;endcaseendendendmodule

结果正确:
在这里插入图片描述
注意点:
我一开始编写的代码如下:

module top_module (input clk,input reset,   // Synchronous resetinput x,output z
);parameter s0=3'd000,s1=3'd001,s2=3'd010,s3=3'd011,s4=3'd100;reg [2:0]state,next_state;always@(posedge clk)beginif(reset)state=s0;elsestate=next_state;endalways@(*)begincase(state)s0:next_state=x?s1:s0;s1:next_state=x?s4:s1;s2:next_state=x?s1:s2;s3:next_state=x?s2:s1;s4:next_state=x?s4:s3;endcaseendassign z=next_state==s3|next_state==s4;endmodule

但是这种跑出来的结果错误。
原因分析:

z 的生成方式:
1、第一段代码:z 是在一个 always 块中根据 next_state 的值来决定的。这个 always 块在时钟上升沿触发,使用了同步逻辑来更新 z 的值。
2、第二段代码:z 是通过一个组合逻辑 assign 语句直接从 next_state 的值计算得到的。这种方法是异步的,不依赖于时钟信号。

同步与异步逻辑:
1、第一段代码:z 是通过时钟同步的方式进行更新的,因此它是同步信号。这个设计确保了 z 的更新与时钟边沿对齐,并且和 state 的更新在同一时钟周期内完成。
2、第二段代码:z 是组合逻辑,直接依赖 next_state 的值进行计算。这个设计意味着 z 的值会随 next_state 的改变而立即改变,而不需要等待时钟边沿。

总结
第一段代码中的 z 是同步更新的,而第二段代码中的 z 是组合逻辑生成的。
如果 z 需要在时钟周期内同步更新,第一段代码更为合适。如果 z 可以即时响应 next_state 的变化,第二段代码则更为简洁和高效。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 用Python插入SVG到PDF文档
  • WindowManager的使用
  • Django 后端架构开发:高效日志规范与实践
  • 85.游戏改造-修改UI分辨率,面向对象方式
  • Android自定义一个带背景的圆环形进度条(Kotlin)
  • 如何解决大数据背景下的数据治理挑战
  • Oracle PL/SQL存储过程和函数简单示例
  • AI工具革新:国内外设计艺术的融合
  • WRF-LES与PALM微尺度气象大涡模拟
  • 鸿蒙内核源码分析(Fork篇) | 一次调用,两次返回
  • QT 文件
  • AI视频创作原理
  • 3-4 STM32F405--定时器输入捕获
  • 【机器学习】3. 欧式距离,曼哈顿距离,Minkowski距离,加权欧式距离
  • 【Python】FastAPI:路径操作
  • 0x05 Python数据分析,Anaconda八斩刀
  • android图片蒙层
  • centos安装java运行环境jdk+tomcat
  • java8 Stream Pipelines 浅析
  • nginx 配置多 域名 + 多 https
  • PHP 7 修改了什么呢 -- 2
  • REST架构的思考
  • Vue官网教程学习过程中值得记录的一些事情
  • 阿里云前端周刊 - 第 26 期
  • 笨办法学C 练习34:动态数组
  • 动态规划入门(以爬楼梯为例)
  • 码农张的Bug人生 - 见面之礼
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 2017年360最后一道编程题
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​比特币大跌的 2 个原因
  • #07【面试问题整理】嵌入式软件工程师
  • (06)金属布线——为半导体注入生命的连接
  • (C++)八皇后问题
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (初研) Sentence-embedding fine-tune notebook
  • (分布式缓存)Redis持久化
  • (回溯) LeetCode 131. 分割回文串
  • (四)Controller接口控制器详解(三)
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (五)Python 垃圾回收机制
  • (转)【Hibernate总结系列】使用举例
  • (转)负载均衡,回话保持,cookie
  • .gitignore文件_Git:.gitignore
  • .NET Core 成都线下面基会拉开序幕
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .net下简单快捷的数值高低位切换
  • .NET学习教程二——.net基础定义+VS常用设置
  • @GetMapping和@RequestMapping的区别
  • @SentinelResource详解
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [2018-01-08] Python强化周的第一天