初识Verilog HDL其一

news2024/9/21 18:58:15

VerilogHDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。

1.1 Verilog基础语法

1.11 逻辑值

  • 0: 逻辑低电平,条件为假;
  • 1:逻辑高电平,条件为真;
  • z:高阻态,无驱动:
  • X:未知逻辑电平;

1.12 关键字

module                                      模块开始定义
input                                          输入端口定义
output                                        输出端口定义
inout                                           双向端口定义
integer										寄存器数据类型
parameter                                  	信号的参数定义
localparam 									信号的参数定义
wire wire                                     线网型变量
reg reg                                        寄存器型变量
always                                         产生reg信号语句的关键字
assign                                         产生wire信号语句的关键字
begin                                           语句的起始标志
end                                              语句的结束标志
posedge/negedge                       时序电路的标志
case Case                                   语句起始标记
default Case                                语句的默认分支标志
endcase Case                             语句结束标记
if if/else                                        语句标记
else if/else                                   语句标记
for for                                          语句标记
endmodule                                  模块结束定义

module -------- 模块开始定义,后续跟着模块名

moudle 模块名(一般与 .v 文件的名称是一致的)

wire -------- 线网型变量

wire 可以看作直接的连接,在可综合逻辑中,会被映射成一条真实存在的物理引线

reg -------- 寄存器型变量,变量为无符号数

reg 对有某一时间点,进行保持的功能。在可综合逻辑中,会被映射成一条真实存寄存器

integer -------- 寄存器型变量,变量为有符号数

integer的位宽为宿主机的字的位数,但最小为32,integer定义为32bit的总线

for循环变量需要使用integer类型

parameter -------- 参数定义

parameter 可以在顶层文件通过实例化,来对此功能模块中的参数呢进行修改

localparam -------- 参数定义

localparam 只能在模块内部使用,不能进行实例化

always -------- 描述组合逻辑以及时序逻辑的语法

always@(敏感条件)

什么是敏感条件:
    简单理解,当敏感条件中的电平发生变化的时候,触发一次语句
    
    同时敏感条件中可以填入 * 号 		*号表达的意思是通配符
    	简单理解: 只要有任何一个信号发生变化的时候,都会触发这个语句。 
always块是Verilog中用来描述组合逻辑以及时序逻辑的语法。

需要补充的是一个设计中可以有多个always块,或者说一定有很多个always块。
这些硬件块都是相互独立同时工作的。每个块之间的连接是决定数据流的原因。为了模拟这种行为,一个always块被做成一个连续的过程(硬件不可能断断续续工作),当敏感列表中的一个信号变化时,它就会被触发并执行一些动作(always块内的语句)。

在这里插入图片描述

reg              无符号整数变量,可以选择不同的位宽。

integer          有符号整数变量,32位宽,算术运算可产生2的补码。

real             有符号的浮点数,双精度。

time             无符号整数变量,64位宽(Verilog-XL仿真工具用64位的正数来记录仿真时刻)

1.13 常量

在程序运行过程中,其值不能被改变的量,称为常量

  • parameter常量(或称符号常量)
  • 数字(包括整数、x和z、负数)

x:指不定值,0/1,寄存器类型变量(无初值时为x)

z: 指高阻态,断开

整数型常量(整常量)

整数型常量(整常量)

  1. 二进制整数**(b/B)**
  2. 八进制整数**(o/O)**
  3. 十进制整数**(d/D)**
  4. 十六进制整数**(h/H)**

常量一般用基数表示法

在这里插入图片描述

  • 位宽指换算为二进制后位宽的总长度

  • 为提高可读性,较长数字之间可用下划线隔开,但不能用在<进制><数字>之间。

例如:

8'd171       指的是 位宽为8bit,十进制171
8'hab        指的是 位宽为8bit,十六进制数ab
8'o253       指的是 位宽为8bit,八进制数253
8'b1010_1011 指的是 位宽为8bit,二进制数10101011

换算为二进制后的位宽总长度:可有可无,verilog会自动为常量匹配合适的位宽,当总位宽长度大于实际位宽,自动向左边补零,

当总位宽长度小于实际位宽,则自动截断左边超出的位数

例如:

大于实际位宽:
	'd7与8'd7:表示相同数值,8'd7换算为二进制就是8"b0000 0111,前面5位补0;

小于实际位宽:
	2'd7换算为二进制就是2 b11,超过2位宽的部分被截断。

如果直接写参数,例如100,表示位宽为32bit的十进制数100.

1.14.阻塞赋值

可以理解为顺序执行,执行完一条才会向后面执行

a=1;
b=2;
c=3;

begin
    a = b;
    c = a;
end

/*
最后结果为:
a=2
b=2
c=2
*/

1.15.非阻塞赋值

可以理解为并行执行(同时执行),全部一起执行的

a=1;
b=2;
c=3;

begin
    a <= b;
    c <= a;
end

/*
最后结果为:
a=2
b=2
c=1
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2120677.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【信号发生器】连续模式和扫描模式下,示波器呈现出来的波形有何区别

信号发生器在“连续模式”和“扫描模式”下输出的波形在示波器中呈现出的波形形状有显著不同&#xff0c;这与它们各自的工作方式密切相关。 1、连续模式&#xff08;Continuous Mode&#xff09; ①工作方式&#xff1a;信号发生器在连续模式下输出固定频率、固定幅度的信号…

[AHK]编写Dialog类代替内置的InputBox命令

更灵活的自定义的Dialog类&#xff0c;可以用来平替内置的InputBox命令 AHK v1代码 #requires Autohotkey v1.0 answer : Dialog("输出结果&#xff1a;", "good") MsgBox, % "you answered: " answer ExitAppDialog(Question, DefaultValue :…

Java面试篇基础部分-垃圾回收算法

大厂面试垃圾回收算法详解内容。 JVM内存垃圾对象的确定? Java开发过程中,使用引用计数和可达性分析。来确定一个对象是否是需要被回收的对象,如果是需要被回收的对象则,对其进行垃圾回收,如果不是则说明是存在引用的对象,则不能清理 首先来分析一下引用算法,如果这个时…

web防火墙技术措施有哪些?防火墙主要类型有哪些

网络安全已经成为了一个不可忽视的重要议题。web防火墙是入侵检测系统&#xff0c;入侵防御系统的一种。web防火墙技术措施有哪些&#xff1f;Web应用防火墙&#xff0c;正是守护网络安全的一道坚实屏障。今天就跟着小编一起了解下关于web防火墙。 web防火墙技术措施有哪些&…

[C高手编程] const, volatile, register, inline: 修饰符与关键字全面解析

&#x1f496;&#x1f496;⚡️⚡️专栏&#xff1a;C高手编程-面试宝典/技术手册/高手进阶⚡️⚡️&#x1f496;&#x1f496; 「C高手编程」专栏融合了作者十多年的C语言开发经验&#xff0c;汇集了从基础到进阶的关键知识点&#xff0c;是不可多得的知识宝典。如果你是即将…

内存管控:内存池篇

目录 1.内存池的工作原理 2.内存池的优势 3.长时间运行的应用和内存碎片 4.代码实践 4.1核心结构&#xff08;内存池结构&#xff09; 4.2核心函数 4.2.1创建内存池 4.2.2销毁内存池 4.2.3分配内存块 4.2.4归还内存块入池 内存池&#xff08;Memory Pool&#xff09…

CMake导入OpenCV检测人脸

基于级联分类器的人脸检测示例"face_detection.cpp"&#xff1a; #include <opencv2/opencv.hpp>int main(int argc,char *argv[]) {// load face classifiercv::CascadeClassifier faceCascade;faceCascade.load(argv[3]);cv::Mat image cv::imread(argv[1]…

Effective Java 学习笔记--42-44 函数接口及其应用(Lambda与方法引用)

目录 函数接口 标准函数接口 自定义函数接口 函数接口的应用 Lambda表达式 Lambda表达式相比于匿名类的优点 方法引用 函数式接口是只包含了一个抽象方法的接口&#xff0c;这种接口的设计目的是为了支持Lambda表达式为代表的函数输入&#xff0c;在Java中有43个标准的默…

基于SpringBoot的旅游网站系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于JavaSpringBootVueMySQL的旅游网站系统【附源码文档】、…

远程连接Hiveserver2服务

目录 1.修改 core-site.xml 和 hive-site.xml 的配置文件 2.启动HiveServer2服务 3.启动Beeline工具连接Hiveserver2服务 4.利用IDEA工具连接Hiveserver2服务 完成Hive本地模式安装后&#xff0c;可以启动hiveserver2服务进行远程连接和操作Hive。 1.修改 core-site.xml …

ctf Mark loves cat (超详细记录)

分析&#xff1a;首先根据问题名称看不出明显的考点方向&#xff0c;先看了一下源代码&#xff0c;没有flag相关内容 我后面就去尝试sql注入方向&#xff0c;但是试了几个参数发现得到的回显都是一致的&#xff0c;全是主页&#xff0c;显然是做了错误重定向&#xff0c;那我就…

基于SpringBoot+Vue+MySQL的垃圾分类回收管理系统

系统展示 用户界面 管理员界面 系统背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿沟&#xff0c;信息的传播速度…

PhpStudy下载安装使用学习

一、官网下载 官网地址&#xff1a;Windows版phpstudy下载 - 小皮面板(phpstudy)https://old.xp.cn/download.html 【首页】选择Windows版&#xff0c;进行下载 下载完成是一个压缩包的形式&#xff0c;解压得到一个.exe的执行文件&#xff0c;点击执行安装程序&#xff08;注…

016.Python爬虫系列_关于登录和验证码

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈 PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈 Oracle数…

BMP280气压传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.传感器数据获取流程 三、程序设计 main.c文件 bmp280.h文件 bmp280.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 BMP280是一款基于博世公司APSM工艺的小封装低功耗数字复合传感器&#xff0c;它可以测…

circuitjs 继电器使用的注意事项及疑惑解答

本篇是关于继电器使用中的一些注意事项, 及疑惑解答. 我们会深入分析下继电器外在行为表现的内在原因, 并针对一些异常情况提出解决方案. 两个输出端点都显示为高电平 在你使用继电器的过程中, 你可能注意到一种令人困惑的现象, 两个输出端有一个明明没有连接到电源, 却也显示…

Docker方式部署ProxySQL和Keepalived组合实现MGR的高可用访问

ProxySQL 代理访问MGR&#xff0c;可以做到故障自动切换主节点&#xff0c;可以自定义访问规则实现读写分离 目录 网络架构一、环境准备二、软件安装1. MGR集群配置2. 创建必要用户2. ProxySQL部署测试3. Keepalived部署高可用4. 测试高可用 网络架构 一、环境准备 三台物理主…

Ubuntu22.04之禁止内核自动更新(二百六十八)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

2516. 每种字符至少取 K 个 滑动窗口 正难则反

给你一个由字符 a、b、c 组成的字符串 s 和一个非负整数 k 。每分钟&#xff0c;你可以选择取走 s 最左侧 还是 最右侧 的那个字符。 你必须取走每种字符 至少 k 个&#xff0c;返回需要的 最少 分钟数&#xff1b;如果无法取到&#xff0c;则返回 -1 。 示例 1&#xff1a; …

专注LabVIEW 做好一件事

在一次LabVIEW的系统改造项目中&#xff0c;遇到一个设备&#xff0c;操作手册居然还是基于DOS系统的。不难看出&#xff0c;这套设备虽然年代久远&#xff0c;但背后的技术积淀极为深厚。事实证明&#xff0c;这套系统在业内享有很高的认可度&#xff0c;由国外团队开发&#…