verilog基本语法学习笔记
input和output
module/endmodule :表征模块的开始与结束。
example :模块名可由用户指定,可包含字母、数字及下划线,需以字母开头,区分大小写
assign :赋值操作关键字,该关键字后可跟一个赋值表达式,该关键字是实现组合逻辑操作的一种主要描述方式。
input/output :表征该信号的方向,除输入、输出外还有一种inout(输入输出)型。
reg和wire
reg相当于存储单元,wire型相当于物理连线,即reg型变量保持最后一次的赋值,而wire型变量需要持续的驱动。
在always块中的变量,只能是reg型
使用wire型变量时,必须搭配assign
input、output、inout声明的变量,默认都是wire型
wire对应于连续赋值,如assign
reg对应于过程赋值,如always块、initial块
多bit逻辑门
对于下面5个逻辑表达式
y1 = a & b;
y2 = a | b;
y3 = a ^ b;
y4 = ~(a & b);
y5 = ~(a | b);
电路图:
语法说明:
[3:0]:表征该信号的位宽,实例中是推荐写法,[0:3]、[4:1]等写法也是合法的
对于逻辑表达式 y = a[7] & a[6] & a[5] & a[4] & a[3] & a[2] & a[1] & a[0];
其电路图为:
Verilog代码:
a[7]:可将一个多位宽信号中的一位或多位以此种方式进行单独处理
& :按位与、归并与操作,如该操作符只有一个操作数时,则将该操作数的所有位进行相与操作,可以实现与注释部分相同的功能,但写法更简洁
一位全加器
对于表达式 {cout,s} = a + b + cin;
Verilog代码
wire :线网型数据类型,verilog语法中的一种主要数据类型,用于表示线网型信号,与实际电路中的信号连线相对应。wire是verilog中的默认数据类型,此例中的输入输出信号没有指定数据类型,则默认为wire型。除wire外,另外一种主要数据类型为reg,表示寄存器类型数据。
内部信号 :此例中的p、g为内部信号,可以简化设计,增加代码可读性
触发器
语法说明:
时序逻辑 :电路具有记忆功能,电路状态不但与当前输入有关,还与前一时刻的状态有关。
同步逻辑 :在同一的时钟信号激励下工作,输出只在时钟的上升沿(或者下降沿)发生变化。
reg :除wire类型外,另外一种常用的数据类型,一般表示寄存器类型数据,不过并不绝对,记住一条原则:在always块内被赋值的信号应定义成reg型,用assign语句赋值的信号应定义成wire型。
always :除assign外,另外一种实现赋值操作的关键字,两者都不可嵌套,区别在于,assign语句只能实现组合逻辑赋值,且一个assign语句后面只能跟一条赋值表达式。而always即能实现组合逻辑赋值,又能实现时序逻辑赋值操作,且可以包含多条赋值表达式,多条赋值表达式,则应位于begin/end对中间。
过程语句
always
initial:
赋值语句
在一个过程块中,阻塞赋值与非阻塞赋值只能使用其中一种
在时序逻辑电路中,两种赋值方式可能或综合出不同的电路结构。如下所示
为避免出现一些稀奇古怪的电路,我们只需记住以下规则:
i:在组合逻辑电路中,使用阻塞式赋值方式"=";
ii: 在时序逻辑电路中,使用非阻塞式赋值方式"<="
iii:在同一个always块内,只能存在一种赋值方式。
iv:一个信号,只能在一个always或一个assign语句下赋值。
v:原则上来说,一个always块内只处理一个或一类信号,不同的信号可在不同的always块内处理。
vi: always块内只能对reg型信号进行处理,不能对wire型数据赋值,也不能实例化模块
过程赋值和连续赋值对比:(原文链接:https://blog.csdn.net/J_Hang/article/details/100633261)
连续赋值:
1)语法上,有关键词“assign”来标识;
2)左侧被赋值的数据类型必须是线网型数据(wire);
3)连续赋值语句不能出现在过程快中(initial/always);
4)连续赋值语句主要用来对组合逻辑进行建模以及线网数据间进行描述;
5)连续赋值语句产生作用后,赋值表达式中信号的任何变化都将立即被反映到赋值线网型数据的取值上;
过程赋值:
1)语法上,没有关键词“assign”;
2)左侧被赋值的数据类型必须是寄存器类型的变量(reg);
3)过程性连续赋值语句只能出现在过程块中;
4)过程性连续赋值语句主要用来对时序逻辑电路进行行为描述;
5)在过程赋值语句的情况下,只有在过程赋值语句被执行时才执行赋值操作,语句执行完后被赋值变量的取值不再受到赋值表达式的影响;
循环语句
宏替换
电路设计举例
verilog基本语法学习笔记相关推荐
- Verilog HDL 语法学习笔记
今天给大侠带来Verilog HDL 语法学习笔记,话不多说,上货. 关于详细的VHDL语法以及Verilog HDL语法可参见往期文章. 一周掌握 FPGA VHDL Day 7 暨汇总篇 一周掌握 ...
- VHDL语法学习笔记:一文掌握VHDL语法
今天给大侠带来FPGA 之 VHDL 语法学习笔记,话不多说,上货. VHDL语法学习笔记 一.VHDL简介 1.1 VHDL 的历史 VHDL 的 英 文 全 名 是 Very-High-Speed ...
- Python基础语法学习笔记
Python基础语法学习笔记 想淘宝省钱看我简介,博客www.liangxin.name (一) 一.Print()函数 1.数字可以直接输出,无需加引号 只能理解数字,却读不懂文字.因为数字和数学运 ...
- MySQL语法学习笔记
MySQL语法学习笔记 学习之道,非尽心竭力者不能进也!我是小七黛,欢迎查看我的笔记,有问题欢迎交流探讨. SQL是一种结构查询语言,用于查询关系数据库的标准语言,包括若干关键字和一致的语法,便于数据 ...
- web阶段概念语法----学习笔记
web学习笔记大纲 一.Oracle数据库 1.概念 2.sql命令(增删改查) 1)select命令 2)insert命令 3)update命令 4)delete命令 3.函数--- oracle提 ...
- javacode基本概念语法--学习笔记
javacode学习笔记大纲 一.语法规范 二.键盘输入 三.数据类型分类及类型转换 四.局部变量.switch-case.随机数 五.函数 六.数组 1.基础概念 2.数组扩容及排序 3.保留小数( ...
- 二、Vue基础语法学习笔记——事件监听v-on、条件判断(v-if、v-else-if、v-else、v-show)、循环遍历(v-for遍历数组对象,key属性、检测数组更新)、图书案例、双向绑定
四.事件监听 在前端开发中,我们需要经常和用于交互. 这个时候,我们就必须监听用户发生的时间,比如点击.拖拽.键盘事件等等 在Vue中如何监听事件呢?使用v-on指令 v-on介绍 作用:绑定事件监听 ...
- 一、Vue基础语法学习笔记系列——插值操作(Mustache语法、v-once、v-html、v-text、v-pre、v-cloak)、绑定属性v-bind(绑定class、style)、计算属性
一.插值操作 1. Mustache 如何将data中的文本数据,插入到HTML中呢? 我们已经学习过了,可以通过Mustache语法(也就是双大括号). Mustache: 胡子/胡须. 我们可以像 ...
- Swift基础语法学习笔记(1)
Swift基础语法的学习 1.HashMap 2.for-in循环控制 3.??聚合运算 4.SwiftUI的一些小技巧 5.init初始化器 6.@propertyWrapper属性包装器 音乐评分 ...
最新文章
- python之接口开发
- Oracle学习笔记十三 触发器
- APP专项测试方法有哪些?
- 一步一步学Silverlight 2系列(34):使用Silverlight Streaming托管Silverlight应用程序_转载...
- 【C++】函数 指针类型参数 与 引用类型参数 对比 ( 修改外部变量需要传入的参数要求 | 参数作返回值 )
- stdthread(8)并发recursive_mutex 递归锁
- 聊聊高并发(三十)解析java.util.concurrent各个组件(十二) 理解CyclicBarrier栅栏
- 解读WPF中的Xaml
- 小程序云开发搜索功能的实现正则_码code | 如何借助小程序云开发实现小程序支付功能...
- Ant Design Pro 开启默认进入登录页
- Fedora 安装QQ2012
- python源码提取_Python提取Linux内核源代码的目录结构实现方法
- vue的html自动刷新,Vue页面刷新记住页面状态的实现
- 幻想乡三连A:五颜六色的幻想乡
- php 实用 函数,PHP实用函数9
- WI-FI STA的电源管理模式---容易混淆的概念说明
- 宣州谢朓楼饯别校书叔云
- 根据坐标点在图片上标记
- 【大疆智图】| 重建三维模型
- CentOS 7 关于防火墙操作