FPGA设计:阻塞与非阻塞赋值的原理与差异解析
需积分: 40 179 浏览量
更新于2024-07-12
收藏 658KB PPT 举报
本文主要探讨了FPGA设计中移位寄存器模型中的核心概念——阻塞赋值和非阻塞赋值的区别,这两种赋值方式对于理解和优化Verilog代码至关重要。
在FPGA设计中,移位寄存器是一种基础的逻辑结构,用于存储和移动数据。通常,移位寄存器由一系列的触发器构成,这些触发器在特定时钟边沿上同步更新其状态。在Verilog中,我们通过编程来描述这种行为,这就涉及到了阻塞赋值( Blocking Assignment)和非阻塞赋值(Non-Blocking Assignment)。
阻塞赋值(=)和非阻塞赋值(<=)是Verilog语言中两种不同的赋值方式,它们在逻辑行为和合成结果上有着显著差异。
1. 阻塞赋值:使用等号“=”表示,如 `b = a;`。在阻塞赋值中,右侧表达式(RHS)首先计算,然后立即更新左侧变量(LHS)。这意味着一旦执行完赋值操作,b的值就会立即改变。由于这个特性,阻塞赋值通常用于组合逻辑电路的描述,因为它确保了逻辑的即时更新。然而,阻塞赋值在综合时,RHS不应包含任何延迟,否则会导致不可综合的结果。
2. 非阻塞赋值:使用小于等于号“<=”表示,如 `b <= a;`。非阻塞赋值则不同,它在时钟边缘触发,RHS的计算与LHS的更新分开进行。RHS的计算在赋值时刻开始时进行,而LHS的更新则在赋值时刻结束时完成。这种方式允许在同一时刻处理多个非阻塞赋值,使得它们可以并行计算,因此在描述时序逻辑,如寄存器传输或状态机时,非阻塞赋值更为适用。
难点在于如何正确选择使用阻塞和非阻塞赋值。设计者需要根据电路的具体需求来决定。在可综合的Verilog模块中,非阻塞赋值常常用来确保时序逻辑的正确性,因为它们可以精确控制在时钟边沿的更新。如果不正确地使用了阻塞赋值,可能会导致信号竞争和不确定的行为,这在时序电路中是不可接受的。
IEEE标准建议在编写可综合的Verilog代码时,应尽可能使用非阻塞赋值,以确保时序逻辑的清晰和正确。但是,阻塞赋值也有其用途,特别是在定义组合逻辑或者在非综合的仿真环境中。
理解并熟练掌握阻塞和非阻塞赋值的差异是FPGA设计的关键,它们是实现正确时序逻辑的基础,并且对于提高代码的可读性和可维护性至关重要。在实际设计中,设计师需要结合具体应用,灵活运用这两种赋值方式。
2021-06-26 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
2021-09-14 上传
李禾子呀
- 粉丝: 26
- 资源: 2万+
最新资源
- Chausie提供了可自定义的视图容器,用于管理内容页面之间的导航。 :猫:-Swift开发
- DianMing.rar_android开发_Java_
- Mockito-with-Junit:与Junit嘲笑
- recycler:[只读] TYPO3核心扩展“回收者”的子树拆分
- 分析:是交互式连续Python探查器
- emeth-it.github.io:我们的网站
- talaria:TalariaDB是适用于Presto的分布式,高可用性和低延迟时间序列数据库
- lexi-compiler.io:一种多语言,多目标的模块化研究编译器,旨在通过一流的插件支持轻松进行修改
- 实时WebSocket服务器-Swift开发
- EMIStream_Sales_demo.zip_技术管理_Others_
- weiboSpider:新浪微博爬虫,用python爬取新浪微博数据
- Vue-NeteaseCloud-WebMusicApp:Vue高仿网易云音乐,基本实现网易云所有音乐,MV相关功能,转变更新到第二版,仅用于学习,下面有详细教程
- asciimatics:一个跨平台的程序包,可进行类似curses的操作,外加更高级别的API和小部件,可创建文本UI和ASCII艺术动画
- Project_4_Java_1
- csv合并js
- containerd-zfs-snapshotter:使用本机ZFS绑定的ZFS容器快照程序