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

    文章

    5590

    浏览量

    129158
  • 电路设计
    +关注

    关注

    6732

    文章

    2580

    浏览量

    218118
  • 时序逻辑
    +关注

    关注

    0

    文章

    39

    浏览量

    9524

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    vivado时序分析相关经验

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

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

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

    时序约束问题的解决办法

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

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

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

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

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

    FPGA时序约束之设置时钟组

    Vivado中时序分析工具默认会分析设计中所有时钟相关的时序路径,除非时序约束中设置了时钟组或false路径。使用set_clock_groups命令可以使时序分析工具不分析时钟组中时
    的头像 发表于 04-23 09:50 983次阅读
    FPGA<b class='flag-5'>时序</b>约束之设置时钟组

    工业自动化中使用固态继电器时应避免的5个错误

    固态继电器(SSR)已成为工业自动化的无名英雄。它们安静、可靠、速度快——这是继电器应具备的所有特点。但就像高科技驾驶舱中的新手飞行员一,即使是经验丰富的工程师使用SSR时也犯常见错误。本文让我们来看看应如何避免
    的头像 发表于 04-20 11:42 532次阅读

    testbench中如何使用阻塞赋值和非阻塞赋值

    本文详细阐述了一个testbench中,应该如何使用阻塞赋值与非阻塞赋值。首先说结论,建议t
    的头像 发表于 04-15 09:34 1025次阅读
    <b class='flag-5'>在</b>testbench中如何使用<b class='flag-5'>阻塞</b><b class='flag-5'>赋值</b>和非<b class='flag-5'>阻塞</b><b class='flag-5'>赋值</b>

    为什么“PWM Adc Dma 344 S32CT”示例中使用ISR块来读取dma adc通道?

    我正在 MBDT 中使用 S32K358 进行一个项目,我正在寻找启用 DMA 传输类型的 ADC 模块。 ADC 示例“PWM Adc Dma 344 S32CT”中,我发现要读取配置为
    发表于 04-08 06:39

    S32DS上使用JLINK调试S32K341,被阻塞了,怎么处理?

    我正在尝试使用 S32K341 新板上刷写程序,但在 S32K3X4EVB 上运行并为 S32K341配置的相同代码出现错误。具体来说,当我使用 S32DS 的 J-Link 探针运行调试时,它在此地址被阻塞,并且不会将其闪存到内存中。有人遇到同样的问题或可以帮助我吗?
    发表于 04-03 08:13

    数字电路—22、时序逻辑电路

    时序电路的逻辑功能可用逻辑表达式、状态表、卡诺图、状态图、时序图和逻辑图6种方式表示,这些表示方法
    发表于 03-26 15:03

    “串口阻塞”你真的会用吗?

    导读在串口通信开发中,数据错乱是常见问题。本文将快速介绍串口标志位的作用及配置方法,帮助解决数据传输错误。这是一个真实案例,用户反馈“串口向另外的设备发送数据,发现运行一段时间后,发送的消息阻塞
    的头像 发表于 02-13 11:42 1245次阅读
    “串口<b class='flag-5'>阻塞</b>”你真的会用吗?

    ADS1100每次复位ADS采集到数据都不一,是时序问题吗?

    为什么我每次复位ADS采集到数据都不一啊 是时序问题吗?
    发表于 02-12 07:06

    DAC8728和DSP28335的XINTF接口时序不匹配怎么解决?

    DAC8728EVM评估板上说DAC8728的时序不满足TI的DSP的时序, 我是CPLD中实现这个逻辑的XWE0和XRD相与后,和XZCS0相或后作为DAC8728的片选信号,
    发表于 01-10 06:07