文章目录

  • 一、Verilog HDL 概述
    • 1、Verilog HDL 是什么
    • 2、Verilog HDL产生的背景
    • 3、Verilog HDL 和 VHDL的区别
  • 二、Verilog HDL 基础知识
    • 1、Verilog HDL 语言要素
      • 1.1、命名规则
      • 1.2、注释符
      • 1.3、关键字
      • 1.4、数值
        • 1.4.1、整数及其表示
        • 1.4.2、实数及其表示
        • 1.4.3、字符串及其表示
    • 2、数据类型
      • 2.1、线网型(wire)
      • 2.2、寄存器型(reg)
      • 2.3、存储器型(memory)
      • 2.4、整数型(integer)
      • 2.5、时间型(time)
      • 2.6、实数型(real)
      • 2.7、参数型
    • 3、运算符
      • 3.1、算术运算符
      • 3.2、关系运算符
      • 3.3、相等关系运算符
      • 3.4、逻辑运算符
      • 3.5、按位运算符
      • 3.6、归约运算符
      • 3.7、移位运算符
      • 3.8、连接运算符
  • 总结

一、Verilog HDL 概述

1、Verilog HDL 是什么

Verilog HDL(Hardware Description Language)是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。 现实生活中多用于专用集成电路(Application Specific Integrated Circuit,ASIC)和现场可编程门阵列(Field Programmabl Gate Array,FPGA)的实现。

2、Verilog HDL产生的背景

第一只晶体管出现后,数字集成电路设计密度越来越大、电路越来越复杂,传统的画图或连线的设计方法已不再适用。

例如:设计4位移位寄存器,仅需简短几行代码完成。
在这里插入图片描述

module register_four(input 	clk		,input 	Reset	,input 	din		,output reg [3:0] qout);always @(posedge clk or posedge Reset)beginif(Reset)qout <= 4'b0;else qout <= {qout[2:0],din};
end endmodule

若要将4位移位寄存器改为8位移位寄存器,仅需修改少量代码。

在这里插入图片描述

module register_eight(input 	clk		,input 	Reset	,input 	din		,output reg [7:0] qout);always @(posedge clk or posedge Reset)beginif(Reset)qout <= 8'b0000_0000;else qout <= {qout[6:0],din};
end endmodule

由上例可直观发现,Verilog HDL可用较少的语句描述较为复杂的电路和灵活的可扩展性,为数字集成电路设计带来了极大的便捷。

3、Verilog HDL 和 VHDL的区别

目前,Verilog HDL 和 VHDL(VHSIC Hardware Description Language,VHSIC 为 Very High Speed Integrated Circuit)是最为常用的硬件描述语音。
Verilog HDL:
语法灵活、宽松,多被思维活跃的美国人采用。因Verilog HDL 语法宽松,其不适合对系统要求层次严格的大规模设计。
VHDL:
语法结构紧凑、严谨,多被思维欧洲人采用。VHDL在大规模数字集成电路设计中具有一定优势。

注:
Verilog基于C语言发展而来,语法灵活、宽松,且国内开发人员多采用Verilog,对初学者较为友好。

二、Verilog HDL 基础知识

1、Verilog HDL 语言要素

1.1、命名规则

在Verilog HDL 中,标识符背用来命名信号、模块、参数等,它可以是任意一组字母、数字、$符号和_(下划线)符号的组合。

:标识符中字母区分大小写,且第一个字必须是字母或下划线。

1.2、注释符

单行注释:单行注释以“//”开始,Verilog HDL忽略此处到行尾的内容。
多行注释:多行注释采用“/**/”,从“/”开始,到“/”结束,Verilog HDL忽略其中注释的内容。

:多行注释不允许嵌套,但单行注释可以嵌套在多行注释中。

例如:

非法多行注释:/*注释内容/*多行注释嵌套多行注释*/注释内容*/
合法多行注释:/*注释内容//多行注释嵌套单行注释*/

1.3、关键字

Verilog HDL 内部已经使用的词成为关键字或保留字,是事先定义好的确认符,用来组织语言结构。

:Verilog HDL中所有的关键字都是小写的。
在这里插入图片描述

1.4、数值

Verilog HDL 有四种基本的电平逻辑数值状态,用数字或字符表达数字电路中传送的逻辑状态和存储信息。Verilog HDL逻辑数值中,“x”和“z”都不区分大小写,即0x1z与0X1Z等价。

在这里插入图片描述
在数值中,下划线符号“_”除不能放于首位外,可随意用在整数与实数中,对数值的大小无影响,仅为提高可读性。

例如:
8’b00110010 与8’b0011_0010的数值大小相等。

1.4.1、整数及其表示

在这里插入图片描述
整数的表示形式:
+/-<size>'<base_format><number>
(1)“+/-”:正数和负数的标识。
(2)size:换算过后二进制的宽度。
(3)“ ’ ”:为基数格式表示固有字符,该字符不能缺省,否则为非法表示形式。
(4)base_format:基数符号。
(5)number:可使用的数字字符集。

例如:

4'b0011   
7'd32
8'hfd     
1.4.2、实数及其表示

(1)十进制表示法。
(2)科学计数发。例如:758.4e2 的值为75840.0,3e-3的值为0.003。

1.4.3、字符串及其表示

:字符串必须包含在同一行中,不能分行书写。

字符串在Verilog HDL中看做8位的ASCII值序列,即一个字符对应8位的ASCII值。

2、数据类型

按抽象程度 Verilog HDL数据类型可分为:物理数据类型(主要包括线网型及寄存器型)和抽象数据类型(主要包括整数型、时间型、实数型及参数型)。抽象数据类型主要用于辅助设计和验证。

2.1、线网型(wire)

wire 类型表示硬件单元之间的物理连线,由其连接的器件输出端连续驱动。如果没有驱动元件连接到 wire 型变量,缺省值一般为 “Z”。对wire 类型赋值用“assign”。

例如:

wire data_out ;
wire flag ;assign data_out = data_in ;
assign flag = 1'b1 ;

2.2、寄存器型(reg)

reg 用来表示存储单元,它的数据会保持最后一次赋值,直到被改写。reg 默认初始值为不定值“x”,缺省是数据位宽为1位。reg 一般为无符号数,若将一个负数赋值给 reg 型变量,则制动转换其二进制补码形式。

例如:

reg data0;
reg data1;reg [4:0] data2;

2.3、存储器型(memory)

存储器型本质上还是寄存器型变量阵列,可以描述RAM型、ROM型存储器以及reg文件。存储器中的每一个单元通过索引进行寻址。
声明格式:
reg<range1><name_of_register><range2>
(1) range1:存储器中寄存器的位宽,缺省,时为1,格式为[msb:lsb]。
(2)range2:寄存器的个数,缺省时为1,格式为[msb:lsb]。
(3)name_of_register:变量名称列表,一次可以定义多个名称,之间用逗号分开。

例如:

reg [7:0] mem1[255:0];//定义了一个有256个8位的存储器
reg [15:0] mem2[127:0],reg1,reg2;//定义了一个具有128个16位的寄存器mem2//2个16位的寄存器reg1和reg2mem1[2] = 0; //给mem1存储器中的第三个存储单元赋值为0

2.4、整数型(integer)

整数类型用关键字 integer 来声明。声明时不用指明位宽,位宽和编译器有关,一般为32 bit。reg 型变量为无符号数,而 integer 型变量为有符号数。

例如:

reg [31:0]      data1 ;
reg [3:0]       byte1 [7:0]; //数组变量,后续介绍
integer j ;  //整型变量,用来辅助生成数字电路always@* beginfor (j=0; j<=3;j=j+1) beginbyte1[j] = data1[(j+1)*8-1 : j*8]; //把data1[7:0]…data1[31:24]依次赋值给byte1[0][7:0]…byte[3][7:0]end
end

2.5、时间型(time)

Verilog 使用特殊的时间寄存器 time 型变量,对仿真时间进行保存。其宽度一般为 64 bit,通过调用系统函数 $time 获取当前仿真时间。

例如

time current_time ;
initial begin#100 ;current_time = $time ; //current_time 的大小为 100
end

2.6、实数型(real)

实数用关键字 real 来声明,可用十进制或科学计数法来表示。实数声明不能带有范围,默认值为 0。如果将一个实数赋值给一个整数,则只有实数的整数部分会赋值给整数。

例如:

real        data1 ;
integer     temp ;
initial begindata1 = 2e3 ;data1 = 3.75 ;
endinitial begintemp = data1 ; //temp 值的大小为3
end

2.7、参数型

参数用来表示常量,用关键字parameter声明,只能赋值一次,但可通过实例化的方式更改参数在模块中的值。局部参数用localparam声明,其作用和用法与parameter相同,区别在于它的值不能改变。所以当参数在本模块中调用时,可以用localparam来说明。

3、运算符

在这里插入图片描述

3.1、算术运算符

Verilog HDL中常用的算术运算符主要有五种,分别是加法(+)、减法(-)、乘法(*)、除法(/)和取模(%)。

注:
算术表达式结果的长度由最长的操作数决定。在赋值语句下,算术结果的长度由等号操作符左端的目标长度决定。

3.2、关系运算符

关系运算符也是双目运算符,是对两个操作数的大小进行比较。关系运算符有大于(>)、小于(<)、大于等于(>=)和小于等于(<=)几种。

3.3、相等关系运算符

相等关系运算符是对两个操作数进行比较,比较结果有三种,即真(1)、假(0)和不定值(x)。Verilog HDL 中有四种相等关系运算符:等于(==)、不等于(!=)、全等(===)、非全等(!==)。
在这里插入图片描述

3.4、逻辑运算符

逻辑运算符有三种,分别为逻辑与(&&)、逻辑或(||)、逻辑非(!)。其中逻辑与、逻辑或是双目运算符,逻辑非为单目运算符。在这里插入图片描述

3.5、按位运算符

Verilog HDL 提供了五种类型位运算符:按位取反(~)、按位与(&)、按位或(|)、按位异或(^ )、按位同或(^~),按位运算符对其自变量的每一位进行操作。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.6、归约运算符

归约操作符包括:归约与(&),归约与非(~&),归约或(|),归约或非(~|),归约异或(^),归约同或(~^)。归约操作符只有一个操作数,它对这个向量操作数逐位进行操作,最终产生一个 1bit 结果。逻辑操作符、按位操作符和归约操作符都使用相同的符号表示,因此有时候容易混淆。区分这些操作符的关键是分清操作数的数目,和计算结果的规则。

例如:

A = 4'b1010 ;
&A ;      //结果为 1 & 0 & 1 & 0 = 1'b0,可用来判断变量A是否全1
~|A ;     //结果为 ~(1 | 0 | 1 | 0) = 1'b0, 可用来判断变量A是否为全0
^A ;      //结果为 1 ^ 0 ^ 1 ^ 0 = 1'b0

3.7、移位运算符

移位操作符包括左移(<<),右移(>>),算术左移(<<<),算术右移(>>>)。移位操作符是双目操作符,两个操作数分别表示要进行移位的向量信号(操作符左侧)与移动的位数(操作符右侧)。算术左移和逻辑左移时,右边低位会补 0。逻辑右移时,左边高位会补 0;而算术右移时,左边高位会补充符号位,以保证数据缩小后值的正确性。

A = 4'b1100 ;
B = 4'b0010 ;
A = A >> 2 ;        //结果为 4'b0011
A = A << 1;         //结果为 4'b1000
A = A <<< 1 ;       //结果为 4'b1000
C = B + (A>>>2);    //结果为 2 + (-4/4) = 1, 4'b0001

3.8、连接运算符

拼接操作符用大括号 {,} 来表示,用于将多个操作数(向量)拼接成新的操作数(向量),信号间用逗号隔开。拼接符操作数必须指定位宽,常数的话也需要指定位宽。

例如:

A = 4'b1010 ;
B = 1'b1 ;
Y1 = {B, A[3:2], A[0], 4'h3 };  //结果为Y1='b1100_0011
Y2 = {4{B}, 3'd4};  //结果为 Y2=7'b111_1100
Y3 = {32{1'b0}};  //结果为 Y3=32h0,常用作寄存器初始化时匹配位宽的赋初值

总结

该篇主要讲述Verilog HDL 常用数据类型、运算符等基础部分。受篇幅限制,此次未涉及至实际应用,后期将逐一讲解。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Developer Data Modeler:一款免费跨平台的数据库建模工具

SQL Developer Data Modeler 是由 Oracle 公司开发的一款免费的图形化数据建模和数据库设计工具&#xff0c;用于创建、浏览和编辑逻辑模型、关系模型、物理模型、多维模型和数据类型模型。 SQL Developer Data Modeler 既是一个独立的应用程序&#xff0c;同时也被集成到了 Or…

CSS面试题及详细答案140道之(21-40)

《前后端面试题》专栏集合了前后端各个知识模块的面试题&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

篇四 tcp,udp客户端服务器编程模型

一 前言 本篇内容主要介绍tcp&#xff0c;udp客户端服务器编程的基础API和示例代码。 二 APIAPI用途使用方socket创建套接字&#xff0c;这是网络通信的桥梁Tcp,udp客户端&#xff0c;服务器bind绑定本地IP地址和端口Tcp,udp客户端&#xff0c;服务器listen监听端口&#xff0c…

ESP32学习笔记_Components(1)——使用LED Strip组件点亮LED灯带

LED strip ESP32-S3 的 RMT&#xff08;Remote Control Transceiver&#xff0c;远程控制收发器&#xff09;外设最初设计用于红外收发&#xff0c;但由于其数据格式的灵活性&#xff0c;RMT 可以扩展为通用的信号收发器&#xff0c;能够发送或接收多种类型的信号&#xff1b;…

无人机抛投模块分析

一、设计核心要点1. 结构轻量化与强度平衡 材料选择&#xff1a;主体采用航空铝、碳纤维复合材料&#xff0c;降低自重并保证承重强度。 机械传动优化&#xff1a;齿轮-齿条传动替代传统丝杆结构&#xff0c;简化机构并提升可靠性。 模块化设计&#xff1a;支持多仓位独立控…

【硬件-笔试面试题】硬件/电子工程师,笔试面试题-33,(知识点:二极管结温,热阻,二极管功耗计算)

目录 1、题目 2、解答 步骤一&#xff1a;明确热阻的相关公式 步骤二&#xff1a;计算二极管的功耗 步骤三&#xff1a;计算二极管的结温 3、相关知识点 一、热阻的定义 二、二极管功耗的计算 三、结温的计算 题目汇总版--链接&#xff1a; 【硬件-笔试面试题】硬件…

【LeetCode 热题 100】79. 单词搜索——回溯

Problem: 79. 单词搜索 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格…

ARM SMMUv3控制器注册过程分析(八)

1.概述 ARM SMMUv3控制器初始化及设备树分析&#xff08;七&#xff09;中描述了IOMMU控制器初始化过程。SMMU驱动最后调用iommu_device_register将其注册到内核中&#xff0c;下面分析一下SMMU控制器注册过程中都做了那些工作。 如下图所示&#xff0c;SMMU控制器注册过程中…

Idefics3:构建和更好地理解视觉-语言模型:洞察与未来方向

温馨提示&#xff1a; 本篇文章已同步至"AI专题精讲" Idefics3&#xff1a;构建和更好地理解视觉-语言模型&#xff1a;洞察与未来方向 摘要 视觉-语言模型&#xff08;VLMs&#xff09;领域&#xff0c;接收图像和文本作为输入并输出文本的模型&#xff0c;正在快…

利用DeepSeek解决kdb+x进行tpch测试的几个问题及使用感受

上文其实没有成功运行tpch的22个标准查询中的任何一个&#xff0c;因为DeepSeek原始给出的导入语句有错&#xff0c;有一些表没有导入。 1.解决类型及长度问题导致的插入tbl文件到内存表失败。 kdbx的Reference card()提到的基本数据类型如下&#xff1a; Basic datatypes n …

SGLang 核心技术详解

SGLang 作为一个高性能的 LLM 服务框架&#xff0c;通过一系列先进的优化技术实现了卓越的推理性能。下面详细解释其核心功能组件&#xff1a; 1. RadixAttention 用于前缀缓存 核心概念 RadixAttention 是 SGLang 独创的前缀缓存机制&#xff0c;基于 Radix Tree&#xff08;基…

精密全波整流电路(四)

精密全波整流电路&#xff08;四&#xff09; 背景说明 [[精密半波整流电路|半波整流]]虽然能实现交直流信号的转换&#xff0c;但是半波整流只能保留信号半个周期的能量&#xff0c;导致信号能量的利用率不高。 因此&#xff0c;在一些场合需要使用到全波整流电路。 同样的&…

深入解读Prometheus 2.33 Series Chunks压缩特性:原理与实践

深入解读Prometheus 2.33 Series Chunks压缩特性&#xff1a;原理与实践 随着监控指标规模不断增长&#xff0c;Prometheus的本地TSDB存储压力日益增大。为提升存储效率&#xff0c;Prometheus 2.33引入了Series Chunks压缩特性&#xff0c;对时间序列数据在写入和存储时进行深…

SpringBoot整合Liquibase提升数据库变更的可控性、安全性、自动化程度(最详细)

为什么要使用liquibase?- 团队协作与版本管理- 当多人&#xff08;或多个小组&#xff09;并行开发、对同一数据库结构进行变更时&#xff0c;如果仅靠手写 SQL 脚本&#xff0c;很 容易产生冲突或漏掉某些变更。- Liquibase 将所有 DDL/DML 操作以“changeset”形式纳入源码管…

数据写入因为汉字引发的异常

spark 数据写hive表,发生 查询分区异常问题 异常: 25107124 19 26.49 ERROR Hive: MelaException(message.Exception thrown when execuling quey. S ELECT DISTINCT ‘org apache.hadop.hive melastore .modelMpartion As"NUCLEUS TYPE,AONCREATE TIME,AO.LAST ACCE…

Springboot项目实现将文件上传到阿里云

Springboot项目实现将文件上传到阿里云 一、概述二、具体步骤 2.1引入阿里云工具 首先先建utils包&#xff0c;然后引入AliOSSUtils类&#xff0c;如下&#xff1a; package com.hechixueyuan.forestfiredetectionsystem.utils;import com.aliyun.oss.OSS; import com.aliyun.o…

如何理解 TCP 是字节流协议?详解

文章目录一、面向字节流二、粘包问题应用层如何解决粘包问题&#xff1f;一、面向字节流 使用 TCP socket 进行网络编程&#xff0c;Linux 内核会给每个 socket 都分配一个发送缓冲区和一个接收缓冲区 由于缓冲区的存在, TCP 读写不需要一一匹配&#xff0c;例如&#xff1a;…

面试问题总结——关于OpenCV(二)

最近小组在面试视觉算法工程师,顺便整理了一波关于OpenCV的面试题目。 有些知识点也不深入,对于写的不对的地方,欢迎指正。 目录 20.像素梯度如何计算? 21.关于开运算和闭运算的理解 22.开运算和闭运算有什么优缺点? 23.图像插值有哪些? 24.图像金字塔的原理 25.边缘检测…

目标导向的强化学习:问题定义与 HER 算法详解—强化学习(19)

目录 1、目标导向的强化学习&#xff1a;问题定义 1.1、 核心要素与符号定义 1.2、 核心问题&#xff1a;稀疏奖励困境 1.3、 学习目标 2、HER&#xff08;Hindsight Experience Replay&#xff09;算法 2.1、 HER 的核心逻辑 2.2、 算法步骤&#xff08;结合 DDPG 举例…

2025 XYD Summer Camp 7.21 智灵班分班考 · Day1

智灵班分班考 Day1 时间线 8:00 在滨兰实验的远古机房中的一个键盘手感爆炸的电脑上开考。开 T1&#xff0c;推了推发现可以 segment tree 优化 dp&#xff0c;由于按空格需要很大的力气导致马蜂被迫改变。后来忍不住了顶着疼痛按空格。8:30 过了样例&#xff0c;但是没有大样…