Verilog HDL 学习笔记(一)基本语法特征

合集下载

Verilog 语言的特点和基本语法

Verilog 语言的特点和基本语法

1.EDA
▪ EDA(Electronic Design Automation )
▪ 电子设计自动化
▪ 特点:硬件的设计“软件化”
软件设计 借助于EDA软件 硬件描述语言 (VHDL或Verilog) 计算机仿真
硬件设计 下载接口 PLD芯片
2021/8/18
4
2.HDL
▪ HDL(Hardware Description Language)
字、( $ )或( _ )。 • 最长可以是1023个字符 • 标识符区分大小写,sel和SEL是不同的标识符 • 模块、端口和实例的名字都是标识符
module MUX2_1 (c, a, b, sel);
output c; input a, b, sel;
Verilog标识符
not not1 (sel_, sel);
endmodule
sum[2:0]
cout
cin
adder
a[2:0]
b[2:0]
数据流语句
▪这个例子描述了一个三位的加法器。从例子中可以看出整个 Verilog HDL程序是嵌套在module和endmodule声明语句里的, 只出现了一个assign语句。
2021/8/18
10
例SR触发器模块
2021/8/18
19
1.4 Verilog的数据类型及逻辑系统
学习内容:
• 学习Verilog逻辑值系统 • 学习Verilog中不同类的数据类型 • 理解每种数据类型的用途及用法 • 数据类型说明的语法
2021/8/18
20
1.主要数据类型
Verilog主要有三类(class)数据类型: • net (线网) : 表示器件之间的物理连接 • register (寄存器) :表示抽象存储元件 • parameters(参数) : 运行时的常数(run-time constants)

第三章 Verilog HDL的基本语法汇总

第三章 Verilog  HDL的基本语法汇总
单元,每个单元为8位 reg [32:1] memory2[1:512]; //存储器为
512个单元,每个单元为32位
3.3 Verilog HDL的运算符
算术运算符 逻辑运算符 关系运算符 等值运算符 位运算符 缩减运算符 移位运算符 条件运算符 拼接运算符
1.算术运算符
算术运算符包括: + (加法运算符或正值运算符,如x+y,+8) - (减法运算符或负值运算符,如x-y,-90) * (乘法运算符,如x*y) / (除法运算符,如x/y) % (取模运算符,如x % y)
1.间隔符: Verilog 的间隔符主要起分隔文本的作用,可以使 文本错落有致,便于阅读与修改。
间隔符包括空格符(\b)、TAB 键(\t)、换行符(\n)及 换页符。
2.注释符:注释只是为了改善程序的可读性,在编译时不起作用。 多行注释符(用于写多行注释): /* --- */; 单行注释符 :以//开始到行尾结束为注释文字。
3.标识符和关键词
标识符:给对象(如模块名、电路的输入与输出端口、变
量等)取名所用的字符串。以英文字母或下划线开始
如,clk、counter8、_net、bus_A 。
关键词:是Verilog语言本身规定的特殊字符串,用来定义 语言的结构。例如,module、endmodule、input、 output、wire、reg、and等都是关键词。关键词都是小 写,关键词不能作为标识符使用 。出始终根据输入的变化而 更新其值的变量,它一般指的是硬件电路中的各种物理 连接.
例:网络型变量L的值由与门的驱动信号 a和b所决定,即L=a&b。a、b的值发 生变化,线网L的值会立即跟着变化。
a
&L

常用VerilogHDL 语法总结

常用VerilogHDL 语法总结

常用VerilogHDL 语法总结1 模块(1)端口定义:声明模块的输入输出口。

引用模块时端口的两种连接方法。

(2)模块内容:I/O说明(输入输出)、内部信号说明(和端口有关的变量说明)、功能定义(定义逻辑功能的三种方式:assign 声明语句;实例元件;always 块)。

(3)理解要点:整体语句并发执行,always块内顺序执行。

2 常量(1)数字:整数及三种表达方式x和z值负数:减号的位置下划线:位置和作用(2)参数:parameter符号常量,常用于定义延迟时间(使用#)和变量宽度。

3 变量(1)wire:表示易assign指定的组合逻辑信号;默认值;任何方程式的输入或assign语句及实例元件的输出;定义格式。

(2)reg:表示always块中指定的信号,代表触发器;寄存器数据类型(触发器存储值),默认值为x;定义格式。

(3)memory:reg的数组;描述RAM、ROM、reg文件;单元索引;一个n为寄存器和n个一位数组的区别。

4 运算符与表达式(1)算术运算符:五种(2)位运算符:五种(3)逻辑运算符:三种(4)关系运算符:四种(3种不同的返回值)(5)等式运算符:四种(6)移位运算符:两种(移位补零)(7)位拼接运算符:{},常用于某些控制信号位;重复与嵌套使用(8)缩减运算符:类似于逻辑运算符,结果为一位二进制数(9)运算符优先级5 语句(1)赋值语句阻塞赋值:b<=a;块结束后完成赋值,b的值不是立即改变的,较为常用;非阻塞赋值:b=a;赋值语句执行后块才结束,b的值马上改变,在沿触发的always块中使用可能引起错误后果。

(2)块语句顺序块begin-end:顺序执行,最后语句执行完流程跳出语句块;并行块fork-join:同时执行,时间最长语句执行完或disable语句执行时跳出程序块;块名的作用;起始时间和结束时间(3)条件语句If-else语句:三种形式;if表达式判断;分号;复合语句;表达式简写;if语句嵌套;if与else的配对。

了解VerilogHDL语法规则吗,看完这篇就知道了

了解VerilogHDL语法规则吗,看完这篇就知道了

了解VerilogHDL语法规则吗,看完这篇就知道了本节介绍Verilog HDL语法规则,包括文字规则、数据对象及运算符的使用等。

Verilog HDL文字规则1.关键词与标识符关键词是Verilog HDL中预先定义的单词,它们在程序中有特别的使用目的。

已经被用作关键词的单词不可以在程序中另作他用,见表3-1。

不同版本的Verilog HDL硬件描述语言中定义的关键词数目略有变化,Verilog 1995的关键词有97个,Verilog 2001共102个。

标识符是用户编程时给对象定义的名称,对象包括:常量、变量、模块、寄存器、端口、连线、示例和beginend块等元素。

定义标识符时应遵循如下规则:只能由26个大小写英文字母、数字和下划线组成。

标识符的第一个字符必须是英文字母或下划线。

字符中的英文字母区分大小写。

【例3-7】判断下面标识符是否合法。

2.注释与C语言一样,硬件描述语言中的注释也不会被编译。

在Verilog HDL中有两种形式的注释方式:采用/* */,多用于多行注释。

采用//,用于单行注释。

【例3-8】注释举例。

在实际使用中,很多公司的编程规范明确表明,注释行中不提倡采用第一种/**/的注释方式,不允许使用中文注释。

3.常数的表示在Verilog HDL中,常数用来表示在程序中不随意变化的量,常数分为整数、实数及字符串三大类型。

(1)整数型常数是数字电路中最常用到的类型,在Verilog HDL中有两种表示方法:简单的十进制格式,例如-50、6等。

基数格式,其表达方式一般如下:〈位宽〉是十进制数值表示的常数化成二进制时对应的宽度,〈进制符号〉用进制符号b或B(二进制)、o或O(八进制)、d或D(十进制)、h或H(十六进制)表示常数的进制格式,即二进制、八进制、十进制、十六进制这4种进制表示。

数字的位宽可以默认,如果没有定义长度,数的长度由具体机器系统决定(至少是32位)。

【例3-9】常数表示方法举例。

VerilogHDL语法基础

VerilogHDL语法基础

VerilogHDL语法基础⼀个复杂电路的完整Verilog HDL模型是由若个Verilog HDL 模块构成的,每⼀个模块⼜可以由若⼲个⼦模块构成。

利⽤Verilog HDL语⾔结构所提供的这种功能就可以构造⼀个模块间的清晰层次结构来描述极其复杂的⼤型设计。

每个模块的内容都是嵌在module和endmodule两个语句之间,每个模块实现特定的功能,模块是可以进⾏层次嵌套的。

每个模块⾸先要进⾏端⼝定义.并说明输⼊(input)和输出(output),然后对模块的功能进⾏逻辑描述。

Verilog HDL程序的书写格式⾃由,⼀⾏可以写⼏个语句,⼀个语句也可以分多⾏写。

除了endmodule语句外,每个语句的最后必须有分号。

⼀个模块是由两部分组成的,⼀部分描述接⼝;另⼀部分描述逻辑功能,即定义输⼊是如何影响输出的。

模块(block)的组成Verilog HDL结构完全嵌在module和endmodule声明语句之间,每个Verilog程序包括4个主要部分:端⼝定义,I/O说明,信号类型声明和功能描述。

module<模块名>(<端⼝列表>);端⼝说明(input,output,inout)参数定义(可选)数据类型定义连续赋值语句(assign)过程块(initial 和 always)⾏为描述语句低层模块实例任务和函数延时说明块endmodule模块声明模块声明包括模块名和端⼝列表。

其格式如下:module 模块名(端⼝1,端⼝2,端⼝3,…);模块结束的标志为关键字:endmodule。

端⼝定义input(输⼊端⼝),output(输出端⼝)和inout(双向端⼝)。

格式如下:input 端⼝名1,端⼝名2,………,端⼝名N; //输⼊端⼝output 端⼝名1,端⼝名2,………,端⼝名N; //输出端⼝inout 端⼝名1,端⼝名2,………,端⼝名N; //输⼊输出端⼝也可以写在端⼝声明语句⾥,其格式如下(为了代码的可读性,⼀般不这么写):module module_name(input port1,input port2,…output port1,output port2… );信号类型说明信号可以分为端⼝信号和内部信号;1. 所有信号都必须进⾏数据类型的定义,如寄存器类型(reg等),连线类型(wire等);2. 如果信号没有定义数据类型,则综合器将其默认为wire型;3. 端⼝的位宽最好定义在端⼝定义中,不要放在数据类型定义中;4. 不能将input和inout类型声明为reg型;模块的端⼝表⽰的是模块的输⼊和输出⼝名,也就是说,它与别的模块联系端⼝的标识。

Verilog-HDL中的基本语法

Verilog-HDL中的基本语法
⑤ 可以用/*……*/或//……对Verilog HDL程序的任 何部分作注释。
一个完整的源程序都应当加上需要的注释, 以加强程序的可读性。
2.2 Verilog HDL的语法
2.2.1 空白符和注释
Verilog HDL的空白符包括空格、tab符号、换行 和换页。
空白符如果不是出现在字符串中,编译源程序 时将被忽略。
8. 条件操作符(Conditional operators)
条件操作符为:?:
条件操作符的操作数有3个,其使用格式为
操作数 = 条件 ? 表达式1:表达式2;
即当条件为真(条件结果值为1)时,操作数 = 表达式1;为假(条件结果值为0)时,操作数 = 表达 式2。
9. 位并接操作符(Concatenation operators) 并接操作符为:{} 并接操作符的使用格式: {操作数1的某些位,操作数2的某些位,…,操作数n 的某些位};
位运算操作符包括:~(按位取反)、&(按位与)、 |(按位或)、^(按位异或)、^~或~^(按位同或)。
在进行位运算时,当两个操作数的位宽不同时, 计算机会自动将两个操作数按右端对齐,位数少的操 作数会在高位用0补齐。
4. 关系操作符(Pelational operators)
关系操作符有:
<(小于)、<=(小于等于)、>(大于)、>=(大 于等于)。
② 每个模块首先要进行端口定义,并说明输入 (input)、输出(output)或双向(inouts),然 后对模块的功能进行逻辑描述。
③ Verilog HDL程序的书写格式自由,一行可以一 条或多条语句,一条语句也可以分为多行写。
④ 除了endmodule语句外,每条语句后必须要有 分号“;”。

FPGA笔记之verilog语言(基础语法篇)

FPGA笔记之verilog语言(基础语法篇)

FPGA笔记之verilog语言(基础语法篇)笔记之verilog语言(基础语法篇)写在前面:verilogHDL语言是面对硬件的语言,换句话说,就是用语言的形式来描述硬件线路。

因此与等软件语言不同,假如想要在实际的中实现,那么在举行verilog语言编写时,就需要提前有个硬件电路的构思和主意,同时,在编写verilog语言时,应当采纳可综合的语句和结构。

1. verilog 的基础结构1.1 verilog设计的基本单元——module在数字电路中,我们经常把一些复杂的电路或者具有特定功能的电路封装起来作为一个模块用法。

以后在运用这种模块化的封装时,我们只需要知道:1.模块的输入是什么;2.模块的输出是什么;3.什么样的输入对应什么样的输出。

而中间输入是经过什么样的电路转化为输出就不是我们在用法时需要特殊重视的问题。

当无数个这样的模块互相组合,就能构成一个系统,解决一些复杂的问题。

verilog语言的基础结构就是基于这种思想。

verilog中最基本的模块是module,就可以看做是一个封装好的模块,我们用verilog来写无数个基本模块,然后再用verilog描述多个模块之间的接线方式等,将多个模块组合得到一个系统。

那么一个module应当具有哪些要素呢?首先对于一个module,我们应当设计好其各个I/O,以及每个I/O的性质,用于与模块外部的信号相联系,让用法者知道如何连线。

第二,作为开发者,我们需要自己设计模块内部的线路来实现所需要的功能。

因此需要对模块内部浮现的变量举行声明,同时通过语句、代码块等实现模块的功能。

综上所述,我们把一个module分成以下五个部分:模块名端口定义I/O解释第1页共9页。

verilog HDL学习笔记

verilog HDL学习笔记

verilog HDL学习笔记(基本概念)1. 作为一种硬件描述语言,verilog可以直接描述硬件结构,也可以通过描述系统行为实现建模,其主要特点和功能有:*描述基本逻辑门和基本开关模型。

* 允许用户定义基元。

* 可以指定设计中的端口到端口的延时,路径时延和设计中的时序检查。

*可以采用多种方式进行建模,这些方式包括(1)顺序行为描述建模——使用过程化结构建模,(2)数据流行为方式——使用连续赋值语句方式建模,(3)结构化方式——使用门和模块实例语句描述建模。

* Verilog中有两类数据类型,线网数据类型和寄存器数据类型。

线网数据类型表示构件间的连线,而寄存器类型表示抽象的数据存储元件。

* 能描述层次设计,可使用模块实例结构描述任何层次。

*不仅能在RTL上进行设计描述,而且能在体系结构级和算法级行为上进行描述。

*可以对并发行为和定时行为进行建模。

2. 模块module是verilog HDL最基本的组成单元,模块的实际意义是代表硬件电路上的逻辑实体(实现特定逻辑功能的一组电路),其范围可以从门到很大的系统。

模块的描述方式有行为建模和结构建模,模块之间并行运行。

模块分层,各模块连接完成整个系统需要用一个顶层模块。

每个系统无论多么复杂,总能划分成多个小的功能模块,按下步骤:(1)把系统划分层模块。

(2)规划各模块的接口。

(3)对模块编程并连接各模块完成系统设计。

Verilog HDL通过模块调用(模块实例化)来实现子模块与高层模块的连接。

模块实例化是通过结构建模的方法来完成的,verilog HDL中的子模块的调用确切的说是“嵌入”,这种引用会把子模块电路完全放在高层模块中。

3. verilog HDL区分大小写。

4. 用parameter来声明参数。

5. 常用预处理指令:…define…undef…ifdef…else…endef…include…timescale6. 线网数据类型:表示元件之间的物理连线,它不能存储数据,线网是被驱动的,可以用连续赋值语句或把元件的输出连接到线网等方式给线网提供驱动,给线网提供驱动的赋值和元件就是驱动源。

VerilogHDL语法基础

VerilogHDL语法基础

Verilog HDL语法基础(1)Verilog的词法约定1Verilog是大小写相关的,其中的关键字全部为小写。

2空白符由空格、制表符、和换行符组成。

3单行注释以“//”开始,verilog将忽略此处到行尾的内容。

多行注释以“/ *”开始,以“*/”结束。

多行注释不允许嵌套4操作符有三种:单目操作符、双目操作符和三目操作符。

5数字声明Verilog中有两种数字生命:指明位数的数字和不指明位数的数字指明位数的数字表示形式:<size>’<base format><number>Size用来指明数字位宽度,只能用十进制整数表示Base format包括十进制(’d或’D),二进制(’b或’B),八进制(‘o或’O),十六进制(‘h或’H)例如4’b1111 //4位2进制数12’h3ac //12位16进制数不指明位数的数字:如果数字说明中没有指定基数,那么默认表示为十进制数。

如果没有指定位宽,则默认的位宽度与仿真器和使用的计算机有关(最小为32位)。

‘o21//32位八进制数X值和Z值:不确定值用X表示,高阻用Z值表示。

在八进制数中代表3位,十六进制中代表4位。

12’h12X //这是一个12位16进制数,其中低四位不确定负数:在表示位宽的数字前面增加一个减号来表示它是一个负数。

-6’d3//一个6位的用二进制补码形式存储的十进制数3,表示负数-6’sd3//一个6位的带符号算数运算的负数下划线符号和问号:除了第一个字符,下划线“_”可以出现在数字中的任何位置,它的作用只是提高可读性,在编译阶段会被忽略掉问号“?”是z的另一种表示,使用问号的目的在于增强casex和casez语句的可读性。

在这两条语句中,“?”表示不必关心的情况。

12’B1111_0011_1110// 增强可读性4’b10??//相当于4’b10zz6字符串是双引号括起来的一个字符队列。

对于字符串的限制是,它必须在一行中书写完,不可书写在多行中,也不能包含回车符。

第3章 Verilog HDL的基本语法

第3章  Verilog HDL的基本语法
3.1 Verilog HDL程序的基本结构
3.1.1 VerilogHDL设计风格 1.VerilogHDL功能描述方式
VerilogHDL可综合硬件逻辑电路的功能描述通常有三种 方式:结构描述方式、数据流描述方式和行为描述方式。
(1)结构描述方式也称为门级描述方式,是通过调用 VerilogHDL语言预定义的基础元件(也称为原语,即 Primitive), 比如逻辑门元件,并定义各元件间的连接关系来构建电路。 这种方式构建的电路模型综合和执行效率高,但描述效率低, 难于设计复杂数字系统。
第3章 Verilog HDL的基本语法
2.端口说明 端口说明用于说明端口列表中每个端口的位宽和输入/ 输出方向。输入/输出方向可用input、output或inout进行说明。 input输入端口说明格式为input[msb1:lsb1]端口名11,端口名 12,…;、 input[msb2:lsb2]端口名21,端口名22,…; output输出端口说明格式为 output[msb1:lsb1]端口名11,端口名12,…; output[msb2:lsb2]端口名21,端口名22,…; inout双向端口说明格式为 inout[msb1:lsb1]端口名11,端口名12,…; inout[msb2:lsb2]端口名21,端口名22,…;
第3章 Verilog HDL的基本语法
5.并行执行 作为电路建模语言,在学习 VerilogHDL时必须注意的是, 模块中的实例化语句、连续赋值语句与过程块之间是并行执 行的。这是 VerilogHDL与一般高级语言最为不同的地方。 若 Verilog模块用到了多个实例引用语句,或者多个 assign语句,或者多个always块,或者将这些语句混合使用,那 么它们的书写顺序是任意的,因为它们对仿真程序和综合程 序的执行来说是并行的。也就是说,当它们被综合器综合成 实际电路时,会形成不同的电路块,当输入信号变化时,这些电 路块在满足延时的条件下同时动作,是并行执行的。 但是,需要明确的是,always块内部的高级抽象描述语句 是按顺序执行的。因为“if…else…”这样的语句若不按顺序 执行,其功能就没有任何意义。

VerilogHDL基本语法解析

VerilogHDL基本语法解析

125//表示十进制数125
X和Z表示位数的特殊性:
input
端口1,端口2,端口3,…;
output
端口1,端口2,端口3,…;
例如
input
ina,inb,cin;
output
sum,cont;
2. 信号类型声明
信号类型声明用来说明设计电路的功能描述中,所用的 信号的数据类型以及函数声明。
信号的数据类型主要有连线(wire)、寄存器(reg)、 整型(integer)、实型(real)和时间(time)等类型。
always @(posedge clk) //时钟上升沿,每次上升沿, 执行always语句
begin
if (clr)
out <=8'b0;
else if (load) out <= data;
else
out <= out+8'b1;
end
assign cout = &out & cin; //”&out”-与缩减运算式
注释分为行注释和块注释两种方式。行注释用 符号//(两个斜杠)开始,注释到本行结束。块注 释用/*开始,用*/结束。块注释可以跨越多行,但 它们不能嵌套。
2.2.2 常数
Verilog HDL的常数包括数字、未知X和高阻Z三 种。数字可以用二进制、十进制、八进制和十六进制 等4种不同数制来表示,完整的数字格式为
//模块端口定义 input ina,inb,cin; output sum,cout;//I/O声明 assign {cout,sum} = ina+inb+cin;
//功能描述语句 endmodule //endmodule后不加分号

Verilog HDL的基本语法

Verilog HDL的基本语法

第三章 Verilog HDL的基本语法前言Verilog HDL是一种用于数字逻辑电路设计的语言。

用Verilog HDL描述的电路设计就是该电路的Verilog HDL模型。

Verilog HDL既是一种行为描述的语言也是一种结构描述的语言。

这也就是说,既可以用电路的功能描述也可以用元器件和它们之间的连接来建立所设计电路的Verilog HDL模型。

Verilog模型可以是实际电路的不同级别的抽象。

这些抽象的级别和它们对应的模型类型共有以下五种:• 系统级(system):用高级语言结构实现设计模块的外部性能的模型。

• 算法级(algorithm):用高级语言结构实现设计算法的模型。

• RTL级(Register Transfer Level):描述数据在寄存器之间流动和如何处理这些数据的模型。

• 门级(gate-level):描述逻辑门以及逻辑门之间的连接的模型。

• 开关级(switch-level):描述器件中三极管和储存节点以及它们之间连接的模型。

一个复杂电路系统的完整Verilog HDL模型是由若干个Verilog HDL模块构成的,每一个模块又可以由若干个子模块构成。

其中有些模块需要综合成具体电路,而有些模块只是与用户所设计的模块交互的现存电路或激励信号源。

利用Verilog HDL语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构来描述极其复杂的大型设计,并对所作设计的逻辑电路进行严格的验证。

Verilog HDL行为描述语言作为一种结构化和过程性的语言,其语法结构非常适合于算法级和RTL级的模型设计。

这种行为描述语言具有以下功能:• 可描述顺序执行或并行执行的程序结构。

• 用延迟表达式或事件表达式来明确地控制过程的启动时间。

• 通过命名的事件来触发其它过程里的激活行为或停止行为。

• 提供了条件、if-else、case、循环程序结构。

• 提供了可带参数且非零延续时间的任务(task)程序结构。

verilog语法(一)Verilog基础知识

verilog语法(一)Verilog基础知识

verilog语法(⼀)Verilog基础知识本节主要讲解了 Verilog 的基础知识,包括 7 个⼩节,下⾯我们分别给⼤家介绍这 7 个⼩节的内容。

1.Verilog 的逻辑值我们先看下逻辑电路中有四种值,即四种状态:逻辑 0:表⽰低电平,也就是对应我们电路的 GND;逻辑 1:表⽰⾼电平,也就是对应我们电路的 VCC;逻辑 X:表⽰未知,有可能是⾼电平,也有可能是低电平;逻辑 Z:表⽰⾼阻态,外部没有激励信号是⼀个悬空状态。

如下图所⽰:2.Verilog 的标识符定义:标识符(identifier)⽤于定义模块名、端⼝名和信号名等。

Verilog 的标识符可以是任意⼀组字母、数字、$和_(下划线)符号的组合,但标识符的第⼀个字符必须是字母或者下划线。

另外,标识符是区分⼤⼩写的。

以下是标识符的⼏个例⼦:Count,COUNT //与 Count 不同,R56_68,FIVE$;虽然标识符写法很多,但是要简洁、清晰、易懂,推荐写法如下:Count,fifo_wr不建议⼤⼩写混合使⽤,普通内部信号建议全部⼩写,参数定义建议⼤写,另外信号命名最好体现信号的含义。

规范建议:以下是⼀些书写规范的要求:1、⽤有意义的有效的名字如 sum、cpu_addr 等。

2、⽤下划线区分词语组合,如 cpu_addr。

3、采⽤⼀些前缀或后缀,⽐如:时钟采⽤ clk 前缀:clk_50m,clk_cpu;低电平采⽤_n 后缀:enable_n;4、统⼀缩写,如全局复位信号 rst。

5、同⼀信号在不同层次保持⼀致性,如同⼀时钟信号必须在各模块保持⼀致。

6、⾃定义的标识符不能与保留字(关键词)同名。

7、参数统⼀采⽤⼤写,如定义参数使⽤SIZE。

3.Verilog 的数字进制格式Verilog 数字进制格式包括⼆进制、⼋进制、⼗进制和⼗六进制,⼀般常⽤的为⼆进制、⼗进制和⼗六进制。

⼆进制表⽰如下:4’b0101 表⽰ 4 位⼆进制数字 0101;⼗进制表⽰如下:4’d2 表⽰ 4 位⼗进制数字 2(⼆进制 0010);⼗六进制表⽰如下:4’ha 表⽰ 4 位⼗六进制数字 a(⼆进制 1010),⼗六进制的计数⽅式为 0,1,2…9,a,b,c,d,e,f,最⼤计数为 f(f:⼗进制表⽰为 15)。

verilog HDL笔记

verilog HDL笔记
1.特别标识符是用 “\” 符开始,以空格符结束的标 识符。它可以包含任何可打印的ASCII字符。但“\”符和空格并不算是标识符的一部分.
2.‘$’ 符号表示 Verilog 的系统任务和函数
常用的系统任务和函数有下面几种:
$time //找到当前的仿真时间
$display, $monitor //显示和监视信号值的变化
`timescale 用于说明程序中的时间单位和仿真精度
举例说明: `timescale 1ns/100ps`timescale 语句必须放在模块边界前面
`uselib 编译引导语句:
用于定义仿真器到哪里去找库元件 , 如果该引导语句启动的话,它就一直有效 直到遇到另外一个`uselib的定义或`resetall语句 ,比其他配置库搜索路径的命令选项作用大如果仿真器在`uselib定义的地点找不到器件库,它不会转向由编译命令行-v 和-y选项指定的器件库去找。
$stop //暂停仿真
$finish //结束仿真
3.特殊符号 “#” 常用来表示延迟:
(1)在过程赋值语句时表示延迟。
例:initial begin #10 rst=1; #50 rst=0; end
(2)在门级实例引用时表示延迟。
常用的编译引导有:
(1) `define
(2)`include
(3)`timescale
(4) `uselib
(5) `resetall
使用`define 编译引导能提供简单的文本替代功能
`define <宏名> <宏文本> ,在编译时会用宏文本来替代源代码中的宏名
使用`include 编译引导,在编译时能把其指定的整个文件包括进来一起处理

VerilogHDL基本语法

VerilogHDL基本语法
参数(符号常量) 参数是一个常量,经常用于定义时延和变量的宽 度。
parameter byte_size=8; //定义一个常数参数 parameter, byte_msb=byte_size-1; //用数表达 式赋值 parameter average_delay = (r+f)/2; //用常数表 达式赋值
32’bx // ”x”表unknown
4’b0???
// ”?”表示高阻
7
常量
实数 十进制计数法,科学计数法
7.2 1.8e-4 //1.8*10-4 9.5E6
字符串与字符变量 字符串为两个双引号“ ”之间的字符,不许 跨行
“This is a string!”; //共17个字符
8
常量
关键词
rcmos real
realtime reg
release repeat rnmos rpmos rtran rtranif0 rtranif1 scalared small specify specparam
26
strength strong0 strong1 supply0 supply1
DQ
out1
DFF
变量
Memory类型
Verilog HDL通过对reg型变量建立数组来对存 储器建模,可以描述RAM型存储器,ROM存储 器和reg文件。
数组中的每一个单元通过一个数组索引进行寻 址。
在语言中没有多维数组存在。 memory型数据是通过扩展reg型数据的地址范 围来生成的。
Verilog HDL 基本语法
语汇代码的编写标准 常量、变量及数据类型 关键字和标示符 运算符 语句 综合代码的编写标准
语汇代码的编写标准

veriloghdl基本语法

veriloghdl基本语法

Verilog HDL(硬件描述语言)是一种用于描述数字电路和硬件设计的语言。

它被广泛用于数字电路设计、FPGA 编程和ASIC 设计等领域。

以下是Verilog HDL的一些基本语法要点:模块声明:Verilog程序通常由一个或多个模块组成。

每个模块的声明以关键字module 开始,后面跟着模块的名称和输入/输出端口的声明。

例如:module MyModule (input wire A,input wire B,output wire Y);// 模块的行为描述endmodule端口声明:端口声明包括输入(input)、输出(output)、双向(inout)端口,以及线(wire)或寄存器(reg)类型的端口。

端口声明通常在模块的参数列表中列出。

线声明:线(wire)用于表示组合逻辑电路中的连接,它们不存储任何状态。

寄存器(reg)用于表示时序逻辑电路中的状态元素,可以存储数据。

例如:wire A, B;reg [7:0] data;组合逻辑:组合逻辑使用assign 语句来描述,它定义了如何从输入信号计算输出信号。

例如:assign Y = A & B; // Y是A和B的逻辑与结果时序逻辑:时序逻辑通常使用always 块来描述。

它表示在时钟信号的边沿或电平触发时执行的操作。

例如:always @(posedge clk) beginif (reset) begindata <= 8'h00;end else begindata <= data + 1;endend条件语句:Verilog使用if、else if 和else 来描述条件分支。

例如:if (condition1) begin// 条件1成立时的操作end else if (condition2) begin// 条件2成立时的操作end else begin// 以上条件都不成立时的操作end模块实例化:你可以在其他模块内部实例化已定义的模块,并连接其输入和输出。

VerilogHDL基础语法

VerilogHDL基础语法
参数指令(parameter)在Verilog中是一个很重要的概念,通常出现 在module里面。有时候在一个系统设计中,把所有的全局参数定 义在一个文本文件中,通过`include来调用。常用于定义状态机 的状态、数据位宽、延时大小等等。
z状态表示高阻状况,用来表示三态建模。
在真实的电子世界中以及在综合软件中,都不会出现x状态,只有 亚稳态的状况。
Verilog 的四种逻辑值
buf
0
0、低、伪、逻辑低、地、VSS、负插入
buf
1 1、高、真、逻辑高、电源、VDD、正
插入
buf
X X、不确定:逻辑冲突无法确定其逻辑值
bufif1
TRUE (3) a && b = (1 | 0 | 0 | 0)&&(0 | 1 | 1 | 1)= TRUE && TRUE =
TRUE (4) !a || ~b = !(1 | 0 | 0 | 0)||~(0 | 1 | 1 | 1)= FALSE || FALSE
= FALSE (5) !a && &b = !(1 | 0 | 0 | 0)&& (0 | 1 | 1 | 1)= FALSE &&
归约操作符是一元操作符,它的表现方式与按位操作符相似或者 相同,但是它的操作数只有一个,并且是对操作数中的每一比特 分别进行操作,得出一个新的一位宽的操作数
表 3–2 归约操作符
操作符
表达式
描述
&
&B
将B中的每一位相与得出一位的结果
~&
~& B
将B中的每个比特相与非得出一比特
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Verilog HDL 学习笔记(一)基本语法特征
一、简单的Verilog模块
module block(a,b,c,d); //模块名为block,有四个口a,b,c,d
input a,b;
output c,d; /*这两行指出哪些是输入,哪些是输出*/
assign c=a|b;
assign d=a&b; //这两行是功能定义
endmodule
该程序中可以看出:
1、整个程序在module和endmodule之间。

2、除最endmodule句外,每句话后加分号。

3.可用//单行注释,/* */任意位置注释。

一个程序中可以有多个模块,处于最上方的叫顶模块,下面的叫子模块,子模块需要顶模块来实现整体功能。

且,模块可嵌套。

(类似于matlab)。

模块需要有模块名,接口,接口I/O说明,内部信号声明(这里好像未体现),功能定义等。

1.模块声明格式如下:module 模块名(口一,口二,…,端口N);
2. I/O说明格式如下:
input 端口名一,端口名二,……,端口名N;
output 端口名一,端口名二,……,端口名N;
也可以把I/O说明写到模块声明里,比如上面的模块的声明与I/O声明可改为:
module (input a,input b,output c,output d) ;
3.逻辑功能定义有以下三种方法:
1.用assign 定义。

这种很简单:如例中的:
assign c=a|b;
2.用实例元件(我的理解,就相当于用一个C语言里的库函数)
如:and and_inst(q,a,b)
用法是键入元件的名字和相连的引脚即可。

3.用always块
用always块可以实现一些复杂的逻辑,比如用if-else语句等。

(暂不太懂,将来再说)
下面一段先抄上来,慢慢理解:
注意:如果有Verilog模块实现一定的功能,首先应该清楚哪些是同时发生的,哪些是顺序发生的。

上面3个例子分别彩了“assign“语句、实例元件和“always”块。

这3个例子描述的逻辑功能是同时执行的。

也就是说,如果把这3项写到个 Verilog文件中去,它们的顺序不会影响实现的功能。

这3项是同时执行的,也就是并发的。

然而,在“always”模块内,逻辑是按照指定的顺序执行的。

“always”块中的语句称为“顺序语句”,因为它们是顺序执行的。

看一下“always”内的语句,就会明白它是如何实现功能的。

if_else_if必须顺序执行,否则其功能就没有任何意义。

如果else语句在if语句之前执行,功能就会不符合要求!为了能实现上述描述的功能,“always”模块内部的语句将按照书写的顺序执行。

(关于上面两段,有一点不明白,如果把这三个语句写到同一个文件中,为什么会说是顺序不影响功能呢?不是每一个模块得顶模块调用时才能执行相应的功能吗?可能有些东西没想清楚,将来自然就懂了)。

相关文档
最新文档