always和assign的作用

一、语法定义

assign,连续赋值。always,敏感赋值。连续赋值,就是无条件全等。敏感赋值,就是有条件相等。assign的对象是wire,always的对象是reg。这就是语法约束。

二、功能差异

assign对应电路下连线操作。always对应插入敏感控制连线。这里容易混淆的就是assign综合的一定是组合电路,但是always综合的不一定是时序电路。always的敏感列表使用*号就可以等效综合为组合电路。如果使用的是电平触发,也使会综合成相应的组合电路。只有出现边沿触发时,才会综合成时序电路。而时序电路,基础就是时钟和使能两个关键信号。时钟在always模块中不再出现(时钟信号在敏感信号作用下的值一直相等,没有使用在内部的意义,当然可以转化后使用)。而对于使能信号,则是会有一个if判断语句,而且处于第一优先级。这就是异步复位。如果不在敏感列表而处于第一优先级,则是同步复位信号。

从上面的描述可以看到:always可以实现两种电路,是不是可以不用assign来实现设计?理论上可以,但是会加大设计的难度。首先要明确的是,always只能对reg变量赋值,这导致wire变量赋值困难。如果没有assign,每个wire变量都要加入一个reg缓冲。可以简单理解:开始时只有always,可以实现基本的功能,然后将其中的组合逻辑提取出来构成assign。同时引入了wire。也就是assign是always的补充(只是方便理解,没有根据)。

三、实际应用

使用assign和always构建加法器:

always@(*)begin
a<=b+c;
end assign a=b+c;

四。拓展

在上面的学习中可以看到,reg和wire的作用也是语法的重要区别。以后有时间可以去区别。

verilog基本语法之always和assign的更多相关文章

  1. 【FPGA篇章三】FPGA常用语句:Verilog基本语法要素

    欢迎大家关注我的微信公众账号,支持程序媛写出更多优秀的文章 Verilog中总共有十九种数据类型,我们先介绍四个最基本的数据类型,他们是: reg型.wire型.integer型.parameter型 ...

  2. Verilog基础语法总结

    去年小学期写的,push到博客上好了 Verilog 的基本声明类型 wire w1; // 线路类型 reg [-3:4] r1; // 八位寄存器 integer mem[0:2047]; // ...

  3. FPGA学习笔记(四)——Verilog基本语法

    ###### [该随笔部分内容转载自小梅哥] ######### 组合逻辑:    多路选择器.加法器.译码器.乘法器 时序逻辑:    计数器.分频器.定时器.移位寄存器 一.Verilog文件的基 ...

  4. verilog入门语法学习-第1篇

    1. 如何观察被测模块的响应: 在initial 块中,用系统任务$time 和 $monitor $time 返回当前的仿真时刻 $monitor 只要在其变量列表中有某一个或某几个变 量值发生变化 ...

  5. verilog 之语法学习

    1.使用非基数表示的十进制视为有符号数.使用基数表示的十进制被视为无符号数. 2.线网中的值被解释为无符号数,整型寄存器中的值被解释为有符号的二进制补码数,. 3.如果选择表达式的值为 x.z,或越界 ...

  6. Verilog RTL优化策略(一):推荐使用assign语法替代if-else和case语法

    参考 <手把手教你设计CPU--RISC-V处理器篇> 先给出不用if-else和case的原因 Verilog中的if-else和case语法存在两大缺点: 不能传播不定态X: 会产生优 ...

  7. Verilog HDL基础语法讲解之模块代码基本结构

    Verilog HDL基础语法讲解之模块代码基本结构   本章主要讲解Verilog基础语法的内容,文章以一个最简单的例子"二选一多路器"来引入一个最简单的Verilog设计文件的 ...

  8. 跟着我从零开始入门FPGA(一周入门XXOO系列)-1、Verilog语法

    (本连载共七部分,这是第一部分) 作者:McuPlayer2013   (EETOP FPGA版块版主) 原帖地址:http://bbs.eetop.cn/thread-385362-1-1.html ...

  9. verilog 2001中的一些新语法

    比较有用的:1,generate语句,但需注意,generate-for中变量范围是已知的确定值, generate-case,generate-if语句中变量都必须是固定的, generate必须跟 ...

  10. verilog语法注意部分

    l generate语句 Verilog-2001添加了generate循环,允许产生module和primitive的多个实例化,同时也可以产生多个variable,net,task,functio ...

随机推荐

  1. maven打包更改版本号

    引入依赖 <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>versions-mave ...

  2. Spring源码之容器的功能拓展-ApplicationContext

    目录 一.解析预备 刷新上下文环境 例如对系统属性或者环境变量进行校验和准备 二.初始化 BeanFactory 并进行 Xml 配置文件的读取 三.对BeanFactory 各种功能填充 四.激活以 ...

  3. 解决etcd集群空间占用问题 mvcc: database space exceeded

    一.查看状态 ./etcdctl --write-out=table endpoint status 可以看到空间占用(DB SIZE).本次是清理过了.原本达到了2G(为默认上限) 二.查看当前版本 ...

  4. UtilMeta - 简洁高效的 Python 后端元框架

    最近开源了我开发多年的一个 Python 后端框架:UtilMeta 项目介绍 UtilMeta 是一个用于开发 API 服务的后端元框架,基于 Python 类型注解标准高效构建声明式接口与 ORM ...

  5. 【Android逆向】定位native函数在哪个so中方法

    1. 在逆向过程中经常需要定位方法在哪个so中,而app加载的so很多,比如 那么如何快速定位方法在哪里呢 2. 比如如下案例,首先看日志 03-28 11:01:56.457 14566 14566 ...

  6. python模块imghdr-----推测图像类型

    官方文档 https://docs.python.org/zh-cn/3/library/imghdr.html#module-imghdr 用处 模块推测文件或字节流中的图像的类型 imghdr.w ...

  7. 1-Django框架简介以及基本操作

    安装 注意:安装的磁盘目录,以及后续通过Django创建目录的时候,不要出现中文,否则会出现预料之外的错误 建议:禁止套娃,即不要在A项目中创建B项目 # 如果不指定版本号,默认最新版 pip ins ...

  8. 新来个架构师,用48张图把OpenFeign原理讲的炉火纯青~~

    大家好,我是三友~~ 在很久之前,我写过两篇关于OpenFeign和Ribbon这两个SpringCloud核心组件架构原理的文章 但是说实话,从我现在的角度来看,这两篇文章的结构和内容其实还可以更加 ...

  9. 03、Etcd 客户端常用命令

    上一讲我们安装 etcd 服务端,这一讲我们来一起学学如何使用 etcd 客户端常见的命令.文章内容来源于参考资料,如若侵权,请联系删除,谢谢. etcd可通过客户端命令行工具 etcdctl 对et ...

  10. Java 在三个数字中找出最大值

    1 int aa1 = 11000000; 2 int aa2 = 20000; 3 int aa3 = 6000; 4 5 //第一种 6 int max = (aa1 > aa2)? aa1 ...