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

HDLbits 刷题 -- Alwaysblock2

学习:

For hardware synthesis, there are two types of always blocks that are relevant:

  • Combinational: always @(*)
  • Clocked: always @(posedge clk)

Clocked always blocks create a blob of combinational logic just like combinational always blocks, but also creates a set of flip-flops (or "registers") at the output of the blob of combinational logic. Instead of the outputs of the blob of logic being visible immediately, the outputs are visible only immediately after the next (posedge clk).

Blocking vs. Non-Blocking Assignment

There are three types of assignments in Verilog:

  • Continuous assignments (assign x = y;). Can only be used when not inside a procedure ("always block").
  • Procedural blocking assignment: (x = y;). Can only be used inside a procedure.
  • Procedural non-blocking assignment: (x <= y;). Can only be used inside a procedure.

In a combinational always block, use blocking assignments. In a clocked always block, use non-blocking assignments. A full understanding of why is not particularly useful for hardware design and requires a good understanding of how Verilog simulators keep track of events. Not following this rule results in extremely hard to find errors that are both non-deterministic and differ between simulation and synthesized hardware.

译:

针对硬件综合,有两种类型的 always 块是相关的:

组合逻辑:always @(*) 时钟控制逻辑:always @(posedge clk)

组合逻辑 always 块创建了一块组合逻辑,就像组合逻辑 always 块一样,但它也在组合逻辑块的输出处创建了一组触发器(或称为“寄存器”)。与组合逻辑块的输出立即可见不同,只有在下一个时钟上升沿(posedge clk)之后,输出才会立即可见。

阻塞赋值与非阻塞赋值 在Verilog中有三种赋值类型:

连续赋值(assign x = y;)。只能在程序("always块")外部使用。 程序化阻塞赋值:(x = y;)。只能在程序内部使用。 程序化非阻塞赋值:(x <= y;)。只能在程序内部使用。 在组合逻辑 always 块中,应使用阻塞赋值。在时钟控制 always 块中,应使用非阻塞赋值。完全理解为什么这样做并不特别有助于硬件设计,并且需要很好地理解Verilog模拟器如何跟踪事件。不遵循这一规则会导致极其难以发现的错误,这些错误既是非确定性的,又在仿真和综合硬件之间存在差异。

练习:

        Build an XOR gate three ways, using an assign statement, a combinational always block, and a clocked always block. Note that the clocked always block produces a different circuit from the other two: There is a flip-flop so the output is delayed.。

用三种方式构建一个异或门(XOR gate):使用赋值语句(assign statement)、组合逻辑 always 块和时钟控制的 always 块。请注意,时钟控制的 always 块产生的电路与另外两个不同:由于存在触发器,输出会有延迟。

// synthesis verilog_input_version verilog_2001
module top_module(input clk,input a,input b,output wire out_assign,output reg out_always_comb,output reg out_always_ff   );assign out_assign = a ^ b;always@(*) out_always_comb = a ^ b;always@(posedge clk) beginout_always_ff <= a^b;endendmodule

运行结果:

分析:

        主要关注三种赋值方式,以及使用方式;

        另外要注意 Clocked方式,会慢一个时钟输出;

http://www.lryc.cn/news/332145.html

相关文章:

  • 一、Docker部署GitLab(详细步骤)
  • Vue3 Ajax(axios)
  • 正则表达式引擎库汇合
  • eBay买家号注册下单容易死号?是什么原因导致?
  • 【Linux】-进程知识铺垫①计算机硬件的组织:冯诺依曼体系结构详细解读②关于操作系统对软硬件及用户的意义
  • 让ECC升级S/4HANA一步到位的“全面升级方案包”
  • AutoGluon
  • 【网站项目】少儿编程管理系统
  • 基于C语言的数据结构--顺序表讲解及代码函数实现展示
  • (学习日记)2024.03.31:UCOSIII第二十八节:消息队列常用函数
  • DLC原理解析及其优化思考
  • tigramite教程(七)使用TIGRAMITE 进行条件独立性测试
  • 【DevOps工具篇】使用Ansible部署Keycloak oauth2proxy 和 单点登录(SSO)设置
  • 鸿蒙OS开发实例:【应用状态变量共享】
  • C#清空窗体的背景图片
  • Qt 实现的万能采集库( 屏幕/相机/扬声器/麦克风采集)
  • 将写好的打印机代码打包成jar包然后直接注册成windows服务,然后通过调用插件的接口地址将流传到接口实现解析并无需预览直接通过打印机直接打印PDF文件
  • 加密软件VMProtect教程:使用脚本-功能
  • 51单片机入门_江协科技_21.1_开发板USB口连接建议
  • 基于Spring Boot 3 + Spring Security6 + JWT + Redis实现登录、token身份认证
  • Kubernetes(k8s):精通 Pod 操作的关键命令
  • 【随笔】Git 高级篇 -- 相对引用2(十三)
  • xilinx AXI CAN驱动开发
  • Python:百度AI开放平台——OCR图像文字识别应用
  • OpenEuler/Centos制作离线软件源
  • 论文笔记:基于多粒度信息融合的社交媒体多模态假新闻检测
  • 攻防世界 xff_referer 题目解析
  • open-cd框架调试记录
  • 【算法刷题day17】Leetcode:110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和
  • Linux云计算之Linux基础2——Linux发行版本的安装