连续@posedge是可以综合,如果后面是阻塞赋值,会出现以下现象:

这部分是源码中的执行部分:

@(posedge clk) b = a;
@(posedge clk) c = b;
$display("blocking2 a = %b    b = %b c = %b",a,b,c);@(posedge clk)
beginc = b;b = a; $display("blocking1 a = %b    b = %b c = %b",a,b,c);
end

这部分是测试代码的主体:

initial
beginclk    = 1'b1;a  = 4'b0;sel    = 2'b0;repeat(15)begin#6sel = sel + 2'b1;a  = 4'd0;#6 a   = 4'd6;  end
end
always #1 clk = ~clk;

现象如下:

可以看到,其他的单个@posedge的都是输出6次,两个@posedge连着用,后面又跟的是阻塞赋值,就导致本来该出现6次的$display只出现了6/2次,更改位三连@就只剩6/3 = 2次了。是由于第一次阻塞赋值必须完成之后才能出第一个@,这时候边沿已经过去了,然后还得接着等第二个边沿,就在第二个@处等着,所以对于 $display,就错过了一个沿,所以就少了半,两个轮回就是三次。

那如果是三个@posedge是不是就应该只显示两次了呢,是的:

@(posedge clk) b = a;
@(posedge clk) c = b;
@(posedge clk) $display("blocking2 a = %b    b = %b c = %b",a,b,c);

但是这种写法是可以综合的吗?我们验证一下:

的确是可综合的。

Verilog中使用连续@posedge会是什么现象,是否可综合相关推荐

  1. Verilog中clk为什么要用posedge,而不用negedge

    posedge是上升沿,电平从低到高跳变 negedge是下降沿,电平从高到低跳变 对于典型的counter逻辑 always @(posedge sys_clk or negedge sys_rst ...

  2. FPGA之道(35)Verilog中的并行与串行语句

    文章目录 前言 Verilog的并行语句 Verilog连续赋值语句 普通连续赋值语句 条件连续赋值语句 Verilog程序块语句 沿事件 纯组合always 纯时序always 具有同步复位的alw ...

  3. Verilog 中 wire 和 reg 数据类型区别

    两者差别很大,完全不能取消. 在Verilog中,wire永远是wire,就是相当于一条连线,用来连接电路,不能存储数据,无驱动能力,是组合逻辑,只能在assign左侧赋值,不能在always @ 中 ...

  4. Verilog中wire与reg类型的区别

    这是事转载的一篇文章,觉得不错,虽然中间有点小错误. wire与reg类型的区别: wire型数据常用来表示以assign关键字指定的组合逻辑信号.模块的输入输出端口类型都默认为wire型.默认初始值 ...

  5. Verilog中wire与reg类型的区别(转载自http://www.cnblogs.com/farbeyond/p/5204586.html)

    wire与reg类型的区别: wire型数据常用来表示以assign关键字指定的组合逻辑信号.模块的输入输出端口类型都默认为wire型.默认初始值是z. reg型表示的寄存器类型.always模块内被 ...

  6. Verilog中 reg和wire 用法 以及always和assign的区别

    1.从仿真角度来说,HDL语言面对的是编译器,相当于使用软件思路,此时: wire对应于连续赋值,如assign: reg对应于过程赋值,如always,initial: 2.从综合角度,HDL语言面 ...

  7. C语言边沿触发函数,边沿触发在Verilog中又分为两种-Read.PPT

    技术廖义奎第章编程基础本次课内容过程赋值行为描述过程中并没有进程的概念但却有与进程相同功能的三种过程分别是和模块实例这三种在执行的方式上与进程一样在过程之间是并行执行的模块实例已在前面介绍过将在赋值一 ...

  8. Verilog初级教程(16)Verilog中的控制块

    文章目录 前言 正文 条件语句if 语法 硬件实现 循环语句 forever repeat while for 往期回顾 参考资料及推荐关注 前言 硬件行为的实现离不开条件语句和其他控制逻辑流的方式. ...

  9. FPGA的设计艺术(18)如何使用Verilog中的数组对存储器进行建模?

    前言 Verilog中的二维数组很有用,可以使用for以及generate for配合二维数组进行使用,可以代替大量寄存器的场合,其实大量同类寄存器可以使用存储器进行代替,Verilog中可以使用二维 ...

最新文章

  1. Linux环境编程--waitpid与fork与execlp
  2. Windows下安装MySQL压缩zip包
  3. TCP/IP 网络编程 (三)
  4. Javascript 基础—变量 运算符
  5. 前端学习(1655):前端系列实战课程之浏览器类型监测
  6. 计算机操作系统(7):进程的基本概念
  7. 如何使用redis来实现常见的游戏排行榜
  8. 使用Anaconda3安装pytorch、paddle环境并在pycharm里面进行环境测试
  9. 黑群晖给局域网电脑发消息_老电脑搭建家用NAS,省钱又好用
  10. Excel VBA实现 通过文件名查找全路径
  11. 使用PLC编程(ST语言)开发的DES加密解密功能块
  12. 浅谈JVM中如何自动回收内存
  13. MSC.MD.NASTRAN.V2010\
  14. 求三点共圆求圆心半径及其推导(三角形外心)
  15. 运行java程序需要的工具软件的目录,运行Java程序需要的工具软件所在的目录是A.JDK的bin目录B.JDK的demo目录C.JDK的lib目录D.JDKR的j...
  16. 解决win2008远程桌面授权过期的方法
  17. f2fs学习笔记 - 6. f2fs初始化流程
  18. python里load什么意思_如何从python中执行LOAD DATA命令
  19. 微信小程序使用face++实现人脸识别登录注册
  20. 《天天向上》最新一期预告:糖果车接驾美少女共赴零食大赏

热门文章

  1. S7-1200_1500PLC程序块的密码保护功能介绍
  2. HTG评论Braven BRV-X:耐候蓝牙音频
  3. 1.Python——给你最爱的心灵鸡汤
  4. Java 读取某文件下的所有文件名,并且修改文件名
  5. windows无法配置此无线连接-解决办法
  6. Efinix 使用原厂jtag下载
  7. http://user.qzone.qq.com/18398259/infocenter?ptlang=2052
  8. 全新校园跑腿小程序源码分享
  9. 延边高考成绩查询时间2021,内蒙古高考成绩查询时间2021
  10. mybatis-plus/mybatis的组件们——拦截器、字段填充器、类型处理器、表名替换、SqlInjector(联合主键处理)