首页 > 其他分享 >verilog基本语法学习笔记

verilog基本语法学习笔记

时间:2023-04-09 22:06:35浏览次数:31  
标签:语句 wire always 笔记 reg 语法 verilog assign 赋值


input和output

verilog基本语法学习笔记_学习


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);

电路图:

verilog基本语法学习笔记_学习_02


verilog基本语法学习笔记_fpga开发_03


语法说明:

[3:0]:表征该信号的位宽,实例中是推荐写法,[0:3]、[4:1]等写法也是合法的

对于逻辑表达式 y = a[7] & a[6] & a[5] & a[4] & a[3] & a[2] & a[1] & a[0];

其电路图为:

verilog基本语法学习笔记_fpga开发_04


Verilog代码:

verilog基本语法学习笔记_学习_05


a[7]:可将一个多位宽信号中的一位或多位以此种方式进行单独处理

& :按位与、归并与操作,如该操作符只有一个操作数时,则将该操作数的所有位进行相与操作,可以实现与注释部分相同的功能,但写法更简洁

一位全加器

对于表达式 {cout,s} = a + b + cin;

verilog基本语法学习笔记_赋值_06


Verilog代码

verilog基本语法学习笔记_fpga开发_07


wire :线网型数据类型,verilog语法中的一种主要数据类型,用于表示线网型信号,与实际电路中的信号连线相对应。wire是verilog中的默认数据类型,此例中的输入输出信号没有指定数据类型,则默认为wire型。除wire外,另外一种主要数据类型为reg,表示寄存器类型数据。

内部信号 :此例中的p、g为内部信号,可以简化设计,增加代码可读性

触发器

verilog基本语法学习笔记_赋值语句_08


语法说明:

时序逻辑 :电路具有记忆功能,电路状态不但与当前输入有关,还与前一时刻的状态有关。

同步逻辑 :在同一的时钟信号激励下工作,输出只在时钟的上升沿(或者下降沿)发生变化。

reg :除wire类型外,另外一种常用的数据类型,一般表示寄存器类型数据,不过并不绝对,记住一条原则:在always块内被赋值的信号应定义成reg型,用assign语句赋值的信号应定义成wire型。

always :除assign外,另外一种实现赋值操作的关键字,两者都不可嵌套,区别在于,assign语句只能实现组合逻辑赋值,且一个assign语句后面只能跟一条赋值表达式。而always即能实现组合逻辑赋值,又能实现时序逻辑赋值操作,且可以包含多条赋值表达式,多条赋值表达式,则应位于begin/end对中间。

过程语句

always

verilog基本语法学习笔记_fpga开发_09


verilog基本语法学习笔记_fpga开发_10


verilog基本语法学习笔记_数据类型_11


verilog基本语法学习笔记_赋值_12

verilog基本语法学习笔记_赋值语句_13

initial:

verilog基本语法学习笔记_fpga开发_14

赋值语句

verilog基本语法学习笔记_赋值语句_15


verilog基本语法学习笔记_赋值_16


在一个过程块中,阻塞赋值与非阻塞赋值只能使用其中一种

在时序逻辑电路中,两种赋值方式可能或综合出不同的电路结构。如下所示

verilog基本语法学习笔记_赋值语句_17


为避免出现一些稀奇古怪的电路,我们只需记住以下规则:

i:在组合逻辑电路中,使用阻塞式赋值方式"=";

ii: 在时序逻辑电路中,使用非阻塞式赋值方式"<="

iii:在同一个always块内,只能存在一种赋值方式。

iv:一个信号,只能在一个always或一个assign语句下赋值。

v:原则上来说,一个always块内只处理一个或一类信号,不同的信号可在不同的always块内处理。

vi: always块内只能对reg型信号进行处理,不能对wire型数据赋值,也不能实例化模块

过程赋值和连续赋值对比:
连续赋值:
1)语法上,有关键词“assign”来标识;
2)左侧被赋值的数据类型必须是线网型数据(wire);
3)连续赋值语句不能出现在过程快中(initial/always);
4)连续赋值语句主要用来对组合逻辑进行建模以及线网数据间进行描述;
5)连续赋值语句产生作用后,赋值表达式中信号的任何变化都将立即被反映到赋值线网型数据的取值上;
过程赋值:
1)语法上,没有关键词“assign”;
2)左侧被赋值的数据类型必须是寄存器类型的变量(reg);
3)过程性连续赋值语句只能出现在过程块中;
4)过程性连续赋值语句主要用来对时序逻辑电路进行行为描述;
5)在过程赋值语句的情况下,只有在过程赋值语句被执行时才执行赋值操作,语句执行完后被赋值变量的取值不再受到赋值表达式的影响;

循环语句

verilog基本语法学习笔记_fpga开发_18


verilog基本语法学习笔记_赋值_19


verilog基本语法学习笔记_学习_20

宏替换

verilog基本语法学习笔记_学习_21

电路设计举例

verilog基本语法学习笔记_赋值_22


verilog基本语法学习笔记_数据类型_23


verilog基本语法学习笔记_学习_24



标签:语句,wire,always,笔记,reg,语法,verilog,assign,赋值
From: https://blog.51cto.com/u_15980129/6179214

相关文章

  • 【学习笔记】go协程和通道
    虽然,线程池为逻辑编写者提供了线程分配的抽象机制。但是,如果面对随时随地可能发生的并发和线程处理需求,线程池就不是非常直观和方便了。能否有一种机制:使用者分配足够多的任务,系统能自动帮助使用者把任务分配到CPU上,让这些任务尽量并发运作。这种机制在Go语言中被称为goroutine。go......
  • 【学习笔记】rabbitmq设置队列ttl和使用延迟插件的代码示例
    文章目录设置队列ttl配置文件生产者消费者设置消息ttl延迟插件的使用修改配置文件修改生产者修改消费者设置队列ttl代码架构:创建两个队列QA和QB,两者队列TTL分别设置为10S和40S,然后在创建一个交换机X和死信交换机Y,它们的类型都是direct,创建一个死信队列QD配置文件spring.rabbitmq.h......
  • 【spring学习笔记】(二)Spring MVC注解配置 参数转换注解@RequestMapping@RequestParam
    @TOC介绍在SpringMVC项目中,<\context:component-scan>配置标签还会开启@Request-Mapping、@GetMapping等映射注解功能(也就是会注册RequestMappingHandler-Mapping和RequestMappingHandlerAdapter等请求映射和处理等组件),但是<context:component-scan>不支持数据转换或验证等注解功......
  • 【学习笔记】mybatis中的缓存介绍和使用
    文章目录介绍一级缓存和二级缓存让一级缓存失效的方法二级缓存的使用清空或者跳过二级缓存的3种方式介绍什么是缓存?缓存就是存储数据的一个地方(称作:Cache),当程序要读取数据时,会首先从缓存中获取,有则直接返回,否则从其他存储设备中获取,缓存最重要的一点就是从其内部获取数据的速度是......
  • 【学习笔记】在windows下进行基于TCP的本地客户端和服务端socket通信
    文章目录socket介绍java中使用socket基于tcp的socket通信使用ServerSocket类创建一个web服务器:(java)windows下的基于tcp的socket编程(c++写)InetAddress类的方法附录1TCPUDP附录2websocketsocket介绍Socket的英文原义是“孔”或“插座”。在编程中,Socket被称做套接字,是网络通......
  • 文件包含,文件上传笔记
    get用来获取数据,post用来发送数据,get请求参数会放到url中,但是隐私性和安全性较差,且请求的数据长度有限,post请求没有长度限制,存放在body中。文件包含漏洞定义:在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码......
  • 协同文档:OT与CRDT实现协同编辑笔记
    讲协同编辑,先回顾下从BBS、邮件,到IM信息的异步传播信息的生产和消费异步发生。典型的场景如论坛,博客,文档库,邮件。我在写这篇文档的时候,你们看不到。你们看的时候,我早已写完。异步场景下,信息的生产者会谨慎的推敲措辞,以确保自己的意思被准确的传达。表达方式的丰富性很重要,除了......
  • .NET Core 离线 生成 Tron 波场私钥和地址笔记
    NuGet引入依赖库PM>Install-PackageTron.Wallet.Net随机生成私钥和对应的地址usingTron.Wallet.Net;namespaceConsoleApp1{internalclassProgram{staticasyncTaskMain(string[]args){vartronECKey=TronECKey.GenerateKey(TronN......
  • AMBA总线(3)—— AHB学习笔记
    前面学习APB总线时,由于内容不多就直接将APB4手册翻译了下。到了AHB总线再这样学习就不好了,一是逐句翻译太累人,二是原文翻译过来划不清重点。因此APB总线以学习笔记的形式记录下来,但其实大多数也就是手册的翻译和理解。1AHB特点AHB协议相比APB协议更加复杂,性能更加优越,手册上也......
  • 【 2023 】近期一些编译调试开发 Android7&9 系统的笔记( h616 / imx8m / rk3399 )
    主要就记录一下自己食用过程中遇到的一些问题吧,板子有新有旧,但都差不多。待整理呢。https://stackoverflow.com/questions/67363030/rebuild-android-code-with-error-ssl-error-when-connecting-to-the-jack-server-thttps://note.qidong.name/2017/07/disable-jack-server/......