0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在时序逻辑中使用阻塞赋值会怎么样?

OpenFPGA 来源:OpenFPGA 作者:OpenFPGA 2022-09-06 09:44 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

【数字实验室】在时序逻辑中使用阻塞赋值会怎么样?

cc7e627a-2d84-11ed-ba43-dac502259ad0.png

阻塞赋值的使用

如之前介绍所述,建议使用阻塞赋值来描述组合逻辑设计。但是,如果在编码时序逻辑行为时使用阻塞赋值,会发生什么?这是需要解决的最重要的问题之一,对后续讨论很重要。

如果阻塞赋值用于编码时序逻辑的行为,则可以观察到综合结果不是正确的功能设计意图。

接下来介绍使用阻塞赋值对时序电路设计进行编码的几个设计方案。

阻塞赋值和多个“Always”进程

如例6.1所述,在多个“Always” 进程中使用阻塞赋值。程序块“Always”在时钟的正边缘触发,综合器推断时序逻辑。如前所述,所有阻塞赋值都在活动队列中进行计算和更新。读者请参阅之前分享的分层事件队列一文。

如例6.1所述,这两个“Always” 进程并行执行,并以两位串行输入串行输出移位寄存器的形式生成输出。首先,always进程生成一个输出“b_in”从第一个“Always” 进程生成的输出被另一个“Always” 进程用作输入。因此,综合器将其推断为两位串行输入串行输出移位寄存器。

示例6.1的综合逻辑如图6.1所示,并具有输入“a_in”,“clk”和输出“y_out”

cc9a8400-2d84-11ed-ba43-dac502259ad0.png

例6.1在多个always块中阻塞赋值

ccae2dde-2d84-11ed-ba43-dac502259ad0.png

图6.1多个always块中阻塞赋值的综合逻辑

同一“always”进程中的阻塞赋值

如果阻塞赋值用于描述时序逻辑,并且在同一“always”程序块中使用多个分配,则预期需求可能与综合逻辑匹配,也可能与综合逻辑不匹配。原因是,在阻塞分配中,所有后续语句(下一个立即数)都被阻塞,除非直到当前语句被执行。这将导致硬件截断,并可能推断出不需要的综合输出。

考虑在示例6.2中描述的设计场景,其意图是创建三位串行输入和串行输出移位寄存器,但是在综合示例6.2之后,它推断为单个触发器。

可综合逻辑如图6.2所示,其输入为“a”、“clk”和输出为“y”。所需的功能是串行输入、串行输出移位寄存器,但上述示例由于使用阻塞赋值而推断出单个触发器。因此,建议在为时序功能编码或描述RTL时使用非阻塞赋值。

ccc009fa-2d84-11ed-ba43-dac502259ad0.png

例6.2在always”进程中的阻塞赋值

cce3f00e-2d84-11ed-ba43-dac502259ad0.png

图6.2同一always进程中阻塞赋值的综合逻辑

阻塞赋值示例

考虑在示例6.3中描述的设计场景,其意图是创建三位串行输入和串行输出移位寄存器,并且由于块“begin” 和 “end”中使用的阻塞赋值语句,它顺序生成三位串行输入串行输出移位寄存器。

综合逻辑如图6.3所示,其输入为“a”、“clk”和输出“y”。所需的功能是串行输入串行输出移位寄存器,它推断串行输入串行输出移位寄存器。因此,需要记住的重要一点是,程序“always”块中的阻塞赋值语句的顺序是综合中的决定性因素。

cd0451a0-2d84-11ed-ba43-dac502259ad0.png

例6.3同一always块中的阻塞赋值(排序)

cd147e0e-2d84-11ed-ba43-dac502259ad0.png

图6.3阻塞赋值重新排序后的可综合逻辑

非阻塞赋值

如之前介绍的“分层事件队列”一文所述,非阻塞赋值在活动事件队列中评估,并在NBA队列中更新。非阻塞赋值用于描述时序逻辑。这些指定在程序块“always”中使用,以获得所需的综合结果。所有非阻塞赋值在“always”块内并行执行。

如例6.4所述。非阻塞赋值用于多个“always”块。程序块“always”在时钟的正边沿触发,综合器推断时序逻辑。综合逻辑如图6.4所示。

cd35dfae-2d84-11ed-ba43-dac502259ad0.png

例6.4不同always块中的非阻塞赋值

cd70c4f2-2d84-11ed-ba43-dac502259ad0.png

图6.4不同always块中的非阻塞赋值的综合逻辑

非阻塞赋值示例

如果使用非阻塞赋值来描述时序逻辑,并且在同一“always”程序块中使用多个赋值,则综合器始终推断出所需的预期逻辑。原因是,在非阻塞赋值中,“begin-end”块中写入的所有语句都是“并行”执行的,这就产生了时序逻辑。

考虑示例6.5中描述的设计场景,意图是创建三位串行输入和串行输出移位寄存器,使用非阻塞赋值。

综合逻辑如图6.5所示,其输入为“a”、“clk”和输出“y”。所需的功能是串行输入串行输出移位寄存器,它推断串行输入串行输出移位寄存器。

cd954354-2d84-11ed-ba43-dac502259ad0.png

例6.5同一always块中的非阻塞赋值

cdab7ca0-2d84-11ed-ba43-dac502259ad0.png

图6.5同一always块中非阻塞赋值的综合逻辑

非阻塞赋值的排序

考虑在示例中描述的设计方案,其意图是创建三位串行输入和串行输出移位寄存器,并使用非阻塞赋值。

上一节中的实例,在本例6.6中重新排序。

综合逻辑如图6.5所示,其输入为“a”、“clk”和输出“y”。所需的功能是串行输入串行输出移位寄存器,它推断串行输入串行输出移位寄存器。所以,重要的一点是要记住,过程“always”块中非阻塞赋值语句的顺序不是推断逻辑的决定性因素。

cdbce9ea-2d84-11ed-ba43-dac502259ad0.png

例6.6在同一always块中具有顺序更改的非阻塞赋值

总结

不总结了,例子很多建议自己测试。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5619

    浏览量

    130409
  • 电路设计
    +关注

    关注

    6745

    文章

    2797

    浏览量

    220212
  • 时序逻辑
    +关注

    关注

    0

    文章

    39

    浏览量

    9572

原文标题:【数字实验室】在时序逻辑中使用阻塞赋值会怎么样?

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Microchip重新定义可编程逻辑,实现更简便且更智能的全集成设计

    解决了基于软件系统的时序挑战。CLB时序分析工具可帮助设计人员设计早期识别信号延迟、关键路径与潜在时序风险,提前验证时序问题有助于缩短调试
    的头像 发表于 04-24 13:46 83次阅读
    Microchip重新定义可编程<b class='flag-5'>逻辑</b>,实现更简便且更智能的全集成设计

    时序是如何让自动驾驶更好理解交通的?

    判,当我们看到一个球滚向路中央,我们不会把它当成一个静止的圆点,而是根据它过去几秒的轨迹,本能地意识到后续可能有一个孩子跑出来。 机器的逻辑中,时序就是将这种对时间的感知转化为算法
    的头像 发表于 04-04 09:40 2004次阅读
    <b class='flag-5'>时序</b>是如何让自动驾驶更好理解交通的?

    Vivado时序约束中invert参数的作用和应用场景

    Vivado的时序约束中,-invert是用于控制信号极性的特殊参数,应用于时钟约束(Clock Constraints)和延迟约束(Delay Constraints)中,用于指定信号的有效边沿或逻辑极性。
    的头像 发表于 02-09 13:49 429次阅读
    Vivado<b class='flag-5'>时序</b>约束中invert参数的作用和应用场景

    锁存器中的时间借用概念与静态时序分析

    对于基于锁存器的设计,静态时序分析应用一个称为时间借用的概念。本篇博文解释了时间借用的概念,若您的设计中包含锁存器且时序报告中存在时间借用,即可适用此概念。
    的头像 发表于 12-31 15:25 5628次阅读
    锁存器中的时间借用概念与静态<b class='flag-5'>时序</b>分析

    为什么FPGA设计中使用MicroBlaze V处理器

    各类行业与应用中,经常能看到许多 FPGA 设计。一个非常常见的现象是:设计者常常用复杂的有限状态机(FSM)来实现 I²C、SPI、GPIO 时序控制等功能。
    的头像 发表于 12-19 15:29 8561次阅读
    为什么<b class='flag-5'>在</b>FPGA设计<b class='flag-5'>中使</b>用MicroBlaze V处理器

    有源逻辑探头的具体应用

    及典型场景的详细拆解: 一、数字电路研发与调试 此为有源逻辑探头的核心应用场景,核心解决复杂数字系统中“信号观测无干扰、多通道信号同步分析”的关键需求,为电路设计验证提供精准的信号数据支撑。 时序逻辑验证: 针对
    的头像 发表于 12-16 10:29 291次阅读
    有源<b class='flag-5'>逻辑</b>探头的具体应用

    飞凌嵌入式ElfBoard-文件I/O的深入学习之阻塞I/O与非阻塞I/O

    操作,这是普通文件本质上决定的。 非阻塞式I/O,即使没有数据可读,也不会被阻塞、而是立马返回。 1.4.1.2 实践 从前面介绍的open函数可以看到,打开文件时可以使用O_NONBLOCK标志
    发表于 12-01 13:07

    连载|开发工具,易安卓让系统功能调用像写应用逻辑简单

    通过自研系统封装库,易安卓将复杂的系统控制能力以接口形式开放给开发者,让系统功能调用像写应用逻辑简单。
    的头像 发表于 11-27 11:40 87次阅读
    连载|开发工具,易安卓让系统功能调用像写应用<b class='flag-5'>逻辑</b>一<b class='flag-5'>样</b>简单

    vivado时序分析相关经验

    vivado综合后时序为例主要是有两种原因导致: 1,太多的逻辑级 2,太高的扇出 分析时序违例的具体位置以及原因可以使用一些tcl命令方便快速得到路径信息
    发表于 10-30 06:58

    MDD 逻辑IC的逻辑电平不兼容问题与解决方案

    现代电子系统中,MDD辰达半导体逻辑IC(集成电路)扮演着至关重要的角色,广泛应用于数据处理、时序控制、信号转换等各类电路中。随着技术的进步,不同逻辑系列的IC(如TTL、CMOS、
    的头像 发表于 10-29 09:39 594次阅读
    MDD <b class='flag-5'>逻辑</b>IC的<b class='flag-5'>逻辑</b>电平不兼容问题与解决方案

    AES加解密算法逻辑实现及其蜂鸟E203SoC上的应用介绍

    这次分享我们简要介绍AES加解密算法的逻辑实现,以及如何将AES算法做成硬件协处理器集成蜂鸟E203 SoC上。 AES算法介绍 AES算法属于对称密码算法中的分组密码,其明文/密文分组长度为
    发表于 10-29 07:29

    时序约束问题的解决办法

    使用vivado对 Verilog 代码进行综合后,点击“SYNTHESIS”下的“Report Timing Summary”,可以查看综合后的时序报告,查看 Setup Time 和 Hold
    发表于 10-24 09:55

    NVMe高速传输之摆脱XDMA设计16:TLP优化

    的延时。并且当大量不同的读请求交叉处理时,读处理模块的并行处理结构更能够充分利用PCIe的乱序传输能力来提高吞吐量。为了清晰的说明读处理模块对吞吐量的提升,设置如图1所示的简单时序例,例中PCIe
    发表于 08-05 18:09

    FX3为什么无法Windows中使用Gstreamer?

    我正在开发 FX3,我可以 Linux 和 Windows 中使用 y8 格式的 ffmpeg 流式传输相机, Linux 中使用 y8 格式的 Gstreamer,但我无法
    发表于 05-29 06:59

    Pico示波器电源时序测试中的应用

    航天电子系统研发中,电源模块时序一致性是保障设备稳定运行的核心指标。
    的头像 发表于 05-15 15:55 1081次阅读
    Pico示波器<b class='flag-5'>在</b>电源<b class='flag-5'>时序</b>测试中的应用