第二章Verilog HDL基础知识

2.1 Verilog HDL语言要素

2.1.1空白符:

空白符包括空格符(lb)、制表符(\t )、换行符和换页符。在编译和综合时,空白符被忽略。

例: initial begin a=3'b100;b=3'b010;end
相对于
initial
begin
	a=3'b100;
	b=3'b010;
end

2.1.2 注释符

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

2.1.3标识符和转义标示符

在Verilog HDL中标识符( ldentifier)被用来命名信号名、模块名、参数名等,它可以是任意一组字母、数字、$符号和_(下划线)符号的组合。应该注意的是标识符的字母区分大小写,并且第一个字符必须是字母或者下划线。
在这里插入图片描述
Verilog HDL规定了转义标识符(Escaped ldentifier)。采用转义标识符可以在一条标识符中包含任何可打印字符,转义标识符以"(反斜线)符号开头,以空白结尾(空白可以是一个空格、一个制表字符或换行符)。
在这里插入图片描述

2.1.4 关键字

语言内部已经使用的词,语言内部的专用词,是事先定义好的确认符,PS:所有关键字都是小写的。

2.1.5 数值

(1)四种基本的逻辑数值状态
在这里插入图片描述
(2)整数及其表示
在这里插入图片描述在这里插入图片描述(3)实数及其表示
( 1)十进制表示法,采用十进制格式,小数点两边必须都有数字,否则为非法的表示形式。例如:3.0,4.54,0.2等等都是正确的,而5.就是错误扯,因为小数点两侧都必须要有数字。
(2)科学计数法。例如:564.2e2的值为56420.0,8.7E2的值为870.0(e不分大小写),3E-3的值为0.003。
在这里插入图片描述

2.2 数据类型

物理数据类型:连线型、寄存器型和存储器型数据类型;信号强度表示数字电路中不同强度的驱动源,用来解决不同驱动强度存在下的赋值冲突
在这里插入图片描述

2.2.1 物理数据类型

1. 连线型

在这里插入图片描述
1)wire 和 tri
在这里插入图片描述
2)wor 和 trior
在这里插入图片描述

2.寄存器型:

reg型是数据储存单元的抽象类型,其对应的硬件电路元件具有状态保持作用,能够存储数据,如触发器、锁存器等。
reg型变量常用于行为级描述,由过程赋值语句对其进行赋值。
在这里插入图片描述

2.2.2 连线型和reg型数据类型的声明

1. 连线型数据类型的声明

在这里插入图片描述

2. 寄存器型数据类型的声明

在这里插入图片描述
在这里插入图片描述

2.2.3 存储器型

  • 存储器型变量可以描述RAM型、ROM型存储器以及reg文件。
  • 存储器变量的一般声明格式为:
    在这里插入图片描述
    在这里插入图片描述

    2.2.4 抽象数据类型

1. 抽象数据类型

主要包括整型( integer) 、时间型( time)、实型(real)及参数型(parameter) 。

2.整型

**integer<list_of_register_variables>;**

在这里插入图片描述

3.时间型

(1)时间型数据与整型数据相类似,只是它是64位的无符号数。时间型数据主要用于对模拟时间的存储与计算处理,常与系统函数$time一起使用。
(2)时间型数据的声明格式为:
time<list_of_register_variables>;
例如: time a,b;ll定义了两个64位的时间型变量

4.实型:

型数据在机器码表示法中是浮点型数值,可用于对延迟时间的计算。
(1)实型数据的声明格式如下:
real<list_of_variables>;
例如:real stime; 定义了一个实数型数据

5.参数型(parameter) :

属于常量,在仿真开始之前就被赋值,在仿真过程中保持不变,以提高程序的可读性和维护性。
(1)参数类型的定义格式为:

parameter参数名1=表达式1,参数名2=表达式2,…,参数名n=表达式n;
例2.2-7:
parameter length=32,weight=16;
parameter Pl=3.14,LOAD=4’b1101;
parameter DELAY=(BYTE+BIT)/2;

2.3 运算符和表达式

在这里插入图片描述

2.3.1 算术操作符(加,减,乘,除,取模)

1.算术操作结果的位宽

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

例2.3-1:
reg[3:0]A,B,C;
reg[5:0]D;
A=B+C; //4位
D=B+C; //6位

2.有符号数和无符号数的使用

在这里插入图片描述

2.3.2 关系操作符

1.大于“>”、小于“<”、大于等于“>=”和小于等于“<=”。

在这里插入图片描述

2. 等于“ == ”、不等于“!=”、全等“-= =”、非全等“!==”

3.比较的结果有三种,即真“1”、假“0"和不定值“x”

在这里插入图片描述

2.3.4 逻辑运算符

逻辑与运算符“&&”、逻辑或运算符“I”、逻辑非运算符“!”
在这里插入图片描述

2.3.5 按位运算符

按位取反“~ ”、按位与“&”、按位或I”、按位异或、按位同或~
例2.3-5:
在这里插入图片描述

2.3.6 归约运算符(缩位运算符)

在这里插入图片描述

2.3.7 移位操作符

在这里插入图片描述

2.3.8 条件运算符

在这里插入图片描述

2.3.9 连接和复制运算符

在这里插入图片描述

2.4 模块的基本概念

2.4.1 模块的基本概念

模块( module)是Verilog HDL语言的基本单元,它代表一个基本的功能块,用于描述某个设计的功能或结构以及与其它模块通信的外部端口。
在这里插入图片描述
一个模块主要包括:模块的开始与结束、模块端口定义、模块数据类型说明和模块逻辑功能描述这几个基本部分。

  • (1)模块的开始与结束:以关键词module开始,以关键词endmodule结
    束的一段程序,其中模块开始语句必须要以分号结束。
  • (2)端口定义:用来定义端口列表里的变量哪些是输入(input)、输出
    ( output)和双向端口( inout)以及位宽的说明。
  • (3)数据类型说明:数据类型在语言上包括wire、reg、memory和
    parameter等类型,用来说明模块中所用到的内部信号、调用模块等的声明语句和功能定义语句。
  • (4)逻辑功能描述:用来产生各种逻辑(主要是组合逻辑和时序逻辑)
    。主要包括以下部分:initial语句、always语句、其它子模块实例化语句、门实例化语句、用户自定义原语(UDP)实例化语句、连续赋值语句( assign) 、函数( function)和任务( task) 。
    在这里插入图片描述

2.4.2 端口

1.端口的定义

一模块的端口可以是输入端口 (input)、输出端口 ( output)或双向端口( inout) 。

2.模块引用时端口的对应方式

  • (1)在引用时,严格按照模块定义的端口顺序来连接,不用标明源模块定义时规定的端口名。格式如下:模块名(连接端口1信号名,连接端口2信号名. … ) ;
  • (2)在引用时用“.”标明源模块定义时规定的端口名。格式如下:模块名(.端口1名(连接信号1名),.端口2名(连接信号2名). . . ) ;一这样表示的好处在于可以用端口名与被引用模块的端口对应,不必严格按端口顺序对应,提高了程序的可读性和可移植性。
  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值