第三章_常用Verilog语法之一

合集下载

第 3 章 Verilog HDL 基础知识

第 3 章    Verilog HDL 基础知识

第三章
Verilog 基础知识
module D_ff(q,data,enable,reset,clock); output q; input data,enable,reset,clock; reg q; always @(posedge clock) //时钟上升沿有效 if (reset == 0) q = 1’b0; else if (enable==1) q = data; //隐含: else q = q: endmodule
第三章
Verilog 基础知识
3) 指定位宽的基数格式 这种格式的表示形式为: <size>’<base_format><number> 参数<size>用来指定所表示数的位宽。当位宽小于数 值的实际位数时,相应的高位部分被忽略;当位宽大于数 值的实际位数,且数值的最高位是 0 或 1 时,相应的高位 部分补0;而当位宽大于数值的实际位数,但数值的最高 位是 x 或 z 时,相应的高位部分补 x 或z。二进制的一个 x 或 z 表示 1 位处于 x 或 z,八进制的一个 x 或 z 表示 3 位 二进制位都处于 x 或 z,十六进制的一个 x 或 z 表示 4 位 二进制位都处于 x 或 z。另外,数值中的 z 可以用“ ?” 来代替。
第三章
Verilog 基础知识
第3章
Verilog HDL 基础知识
希望通过本章的介绍,能够对 Verilog HDL 有初步 的了解。 (1)词法:包括间隔符与注释符、数值、字符串与关键字。 (2)数据类型:包括物理数据类型与抽象数据类型。 (3)运算符:包括算术运算符、逻辑运算符、关系运算 符、相等关系运算符、按位运算符、归约运算符、移 位运算符、条件运算符、连接与复制操作及其优先级。 (4)系统任务与系统函数:包括标准输出任务、文件管理 任务、仿真控制任务、时间函数及其他常用函数。 (5)编译指令:宏编译指令、文件包含指令、条件编译指 令、时间定标指令与工作库定义指令。

verilog 基本语法

verilog 基本语法

verilog 基本语法Verilog基本语法Verilog是一种硬件描述语言,用于描述数字电路的行为和结构。

它具有强大的建模能力,能够描述复杂的数字系统,并用于逻辑设计和硬件验证。

本文将介绍Verilog的基本语法,以帮助读者对这种语言有一个基本的了解。

1. 模块声明在Verilog中,所有的设计都是通过模块来实现的。

模块是Verilog 的基本组织单位,类似于其他编程语言中的函数或类。

模块声明由关键字module开头,后面跟着模块的名称和输入输出端口的定义。

例如:module my_module(input a, b, output c);// 模块的主体endmodule2. 端口声明在模块声明中,使用关键字input和output来声明输入和输出端口。

输入端口用于接收信号,输出端口用于输出信号。

端口可以是单个的信号,也可以是信号的数组。

例如:input a, b; // 单个输入端口output c; // 单个输出端口input [7:0] d; // 输入信号的数组3. 信号声明在Verilog中,使用关键字wire、reg、integer等来声明信号。

wire用于声明连续的信号,reg用于声明时序的信号,integer用于声明整数变量。

例如:wire a, b; // 连续信号reg [7:0] c; // 时序信号,有8位integer d; // 整数变量4. 时钟和复位在数字电路中,时钟和复位信号是非常重要的。

在Verilog中,可以使用关键字input来声明时钟和复位信号,并在模块的输入端口中定义。

例如:input clk; // 时钟信号input rst; // 复位信号5. 运算符Verilog支持各种运算符,包括算术运算符、逻辑运算符、位运算符等。

算术运算符用于执行加减乘除等操作,逻辑运算符用于执行与或非等逻辑操作,位运算符用于执行位操作。

例如:a =b + c; // 加法运算d = ~(a & b); // 与运算和非运算6. 控制结构在Verilog中,可以使用if语句、case语句等控制结构来实现条件判断和多路选择。

verilog语法

verilog语法

第三章 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 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

Verilog基本语法

Verilog基本语法

18
整数和实数常量小结
整数的大小可以定义也可以不定义。整数表示为: 数字中(_ )忽略,便于查看 没有定义大小(size)整数缺省为32位 /*特别注意*/ 缺省数基为十进制 数基(base)和数字(16进制)中的字母无大小写之分 当数值value大于指定的大小时,截去高位。如 2'b1101表示的是 2'b01
13
3.2.1 术语及定义
1.空白符:空格、tabs及换行 2. 标志符(Identifier):Verilog中对象(如模块或信号)的名字 3.LSB:最低有效位(Lease significant bit) 4.MSB:最高有效位(Most significant bit)
14
3.2.2 空白符和注释
– include保存在文件中的全局的或经常用到的一些定义,如文本宏
– 在模块内部include一些任务(tasks),提高代码的可维护性。
26
3.2.10 文本替换`define (了解)
编译指导`define提供了一种简单的文本替换的功能 `define <macro_name> <macro_text>
多行注释,在/* */内
and and2 (b1, b, sel);
or or1 (out, a1, b1);
endmodule
15
3.2.3 Verilog采用的四值逻辑系统
‟0‟, Low, False, Logic Low, Ground,VSS, Negative Assertion
„1‟, High, True, Logic High, Power, VDD, VCC, Positive Assertion

HDL

HDL

安康学院 电子与信息工程系电子教研室
3.1 模块的结构
功能定义
模块中最重要的部分是逻辑功能定义部分。 模块中最重要的部分是逻辑功能定义部分。有三种方法可在 模块中产生逻辑。 模块中产生逻辑。 - 用 assign 语句(数据流描述): assign a = b & c ; - 用实例元件(结构化描述): and2 and_inst ( q, a, b); - 用 “always” 块(行为描述): always” always @ (posedge clk or posedge clr) begin if (clr) q<= 0; else if (en) q<= d; end
安康学院 电子与信息工程系电子教研室
3.2 数据类型及其常量及变量
二. reg型 reg型
寄存器是数据储存单元的抽象。 寄存器是数据储存单元的抽象。寄存器数据类型的关键字是 reg。 reg类型数据的默认初始值为不定值x。 reg。 reg类型数据的默认初始值为不定值x 类型数据的默认初始值为不定值 reg型数据常用来表示用于 always”模块内的指定信号 型数据常用来表示用于“ 模块内的指定信号, reg型数据常用来表示用于“always 模块内的指定信号,常 代 表触发器。 always”块内被赋值的每一个信号都必须定义成 表触发器。在“always 块内被赋值的每一个信号都必须定义成 reg型 reg型。 reg型数据的格式如下 型数据的格式如下: reg型数据的格式如下: [n数据名1,数据名2, 1,数据名2,… 数据名i; 数据名i; reg [n-1:0] 数据名1,数据名2, 或 数据名1,数据名2, 1,数据名2,… 数据名i; 数据名i; reg [n:1] 数据名1,数据名2,

Verilog-HDL中的语句

Verilog-HDL中的语句

第三章 Verilog-HDL中的语句1.基本语句1.1赋值语句赋值语句分为连续赋值语句和过程赋值语句。

1.1.1连续赋值语句1.连续赋值语句用于把值赋给wire型变量(不能为reg型变量赋值)。

语句形式为:assign A = B & C;a.只要在右端表达式的操作数上有事件(事件为值的变化)发生时,表达式即被计算;b.如果计算的结果值有变化,新结果就赋给左边的线网。

2.连续赋值的目标类型♦标量线网 wire a;♦向量线网 wire [7:0] a;♦向量线网的常数型位选择 a[1]♦向量线网的常数型部分选择 a[3:1]♦上述类型的任意的拼接运算结果 {3a[2],a[2:1]}注:多条assign语句可以合并到一起。

3.线网说明赋值连续赋值可作为线网说明本身的一部分。

这样的赋值被称为线网说明赋值。

如: wire Clear = 'b1;等价于 wire clear;assign clear=‘b1;1.1.2 过程赋值语句1.a.过程性赋值是仅仅在initial语句或always语句内的赋值b.它只能对reg型的变量赋值。

表达式的右端可以是任何表达式。

c.过程性赋值分两类:阻塞性过程赋值 =非阻塞性过程赋值<=2.语句内部时延与句间时延a.在赋值语句中表达式右端出现的时延是语句内部时延。

Done = #5 1'b1;b.通过语句内部时延表达式,右端的值在赋给左端目标前被延迟。

即右端表达式在语句内部时延之前计算,随后进入时延等待,再对左端目标赋值。

c.对比以下语句间的时延beginTemp = 1'b1;#5 Done = Temp; //语句间时延控制end3.阻塞性过程赋值a.赋值运算符是“=”的过程赋值是阻塞性过程赋值。

b.阻塞性过程赋值在在下一语句执行前,执行该赋值语句。

例:initialbeginClr = #5 0;Clr = #4 1;Clr = #10 0;end4.非阻塞性过程赋值a .在非阻塞性过程赋值中,使用赋值符号“ <=”。

第三讲 verilog的基本语法

第三讲 verilog的基本语法

TOP HA
18
参数值的模块引用
module TOP3(NewA,NewB,NewS,NewC); input NewA, NewB; output NewS,NewC; HA #(5,2) Ha1 (NewA, NewB, NewS, NewC);
//第1个值5赋给参数AND_DELAY,该参数在模块HA中说明。 //第2个值2赋给参数XOR_DELAY,该参数在模块HA中说明。
asiccenterarnoldshi在过程块alwaysinitial中对变量赋值时忘了把它定义为寄存器类型reg或已把它定义为连接类型了wire把实例的输出连接出去时把它定义为寄存器类型把模块的输入信号定义为寄存器类型
TJIC
第三章 verilog的基本语 verilog的基本语 法
天津大学电子科学与技术系史再峰 shizaifeng@
连续赋制语句用于把值赋给线网型变量(不能为寄 存器型变量赋值) 语句形式为:assign A = B & C;
连续赋值语句在什么时候执行呢? 只要在右端表达式 的操作数上有事件(事件为值的变化)发生时,表达式 即被计算;如果结果值有变化,新结果就赋给左边的 线网。
28
连续赋值的目标类型
标量线网 向量线网 向量的常数型位选择 ,
endmodule
19
课堂练习课堂练习-参数传递
假定一个模块为BK,内部 两个参数P1,P2;另外一 个模块为HA,内部参数P3, P4 其在TOP模块中实例化调 用的名称分别为U1, U2 请尝试在top模块中用两种 不同的方法改变其参数值 p1-p4分别为1,2,3,4
TOP U2 U1
20
二、变 量
24
补充: 补充:CMOS NOR
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2014-4-25 33
参数值的改写(方法之二)
举例说明:
module mod ( out, ina, inb); … parameter cycle = 8, real_constant=2.039, file = ―/user1/jmdong/design/mem_file.dat‖; … endmodule module test; … mod # (5, 3.20, ―../my_mem.dat‖) mk(out,ina,inb); … endmodule
编写Verilog HDL模块的练习
• 请在下面的空格中填入适当的符 号 • 使其成为右图的Verilog 模块 : • module block1(a, b, —, —, — ); • input —, —, —; • —— d, — ; • assign d = a | ( b & ~c) ; • assign e = ( b & ~c ); • ______
2014-4-25 12
模块端口定义
• 声明输入、输出或是双向 • 声明数据类型(wire or reg)default: wire • 输入和双向不能声明为reg型 • 测试模块不需要端口定义
2014-4-25
13
3.1.2 模块内容
• I/O说明 • 内部信号声明 • 功能定义
2014-4-25
• 寄存器类型:抽象的数据存储单元
– 只能在always和initial语句中被赋值,有可 能被综合成寄存器
2014-4-25 11
模块调用(引用)方式
• 模块调用采用位置关联调用方式,只需按序列出实例 的端口名。模块实例语句如下: ha h1(P,Q,S,C); 在本语句中,ha是模块名,h1 是实例名称,并且端 口按序关联。 • 模块调用采用端口名关联调用方式,则无需按序排列 端口名,但实例的端口信号和被调用模块的端口信号 必须一一列出。模块实例语句如下: ha h2(.in2(C),.in1(S),.out1(P),.out2(Q),) 由于端口之间的对应关系十分清楚,因此端口名的排 列顺序可随意改变。
module block (a,b,c,d); input a,b; output c,d; assign c= a | b ; assign d= a & b; endmodule a c
b
d
2014-4-25
3
3.1 模块结构
• • • • 端口定义 I/O说明 内部信号声明 功能定义
2014-4-25
第三章 常用Verilog语法(一)
周晓波 北京交通大学电子信息学院 xbzhou@ 51683636
2014-4-25 1
-25
2
3.1 模块结构
Verilog 的基本设计单元是“模块” (block) 。一个模 块是由两部分组成的:一)描述接口;二)描述逻 辑功能,即定义输入是如何影响输出的。下面举例 说明:
• 输入输出口
– inout[信号位宽-1,0] 端口名1; – inout[信号位宽-1,0] 端口名2; …… – inout[信号位宽-1,0] 端口名k; 2014-4-25
15
I/O说明的格式(2)
• 可以在端口声明语句中同时进行端口类 型说明
– module module_name(input port1, input port2, …output port1, output port2…);
– 各个always块之间是并发关系
2014-4-25
20
要点小结
• Verilog模块中所有过程块、连续赋值语 句、实例引用都是并行的; • 表示一种通过变量名互相连接的关系; • 同一模块中这三者出线的先后顺序没有 关系; • 只有assign和实例引用语句可以独立于过 程块出线在模块的功能定义部分。
– – – – – – 二进制整数 b或B 十进制整数 d或D 十六进制整数 h或H 八进制整数 o或O 8‘b10100011 8’haa
25
2014-4-25
3.2.1 常量
• • • • • x和 z X:不定值 Z:高阻值 4’b10x0 8’h4z
2014-4-25
26
3.2.1 常量
• 模块的端口声明了模块的输入输出端口
module 模块名(端口1,端口2,端口 3,…); 模块的端口表示的是模块的输入输出口 名,与别的模块联系端口的标识。 模块引用的问题
2014-4-25 9
模块调用(引用)形式
模块调用的基本形式为: • 模块名 调用名 (端口名 表项)
• • 由于描述的是具体的硬件 逻辑,每个模块都表示一 个具有特定功能的电路块。 因此每当它被其它模块调 用时,该模块内部被调用 的电路块就被复制一次。 如果在当前模块中多次调 用同一个模块,则需要用 不同的调用名。 Verilog HDL的模块调用 和C语言的函数调用相似, 也存在形参和实参的结合 问题。
举例说明:
2014-4-25
32
参数值的改写(方法之一)
举例说明:
module mod ( out, ina, inb); … parameter cycle = 8, real_constant=2.039, file = ―/user1/jmdong/design/mem_file.dat‖; … endmodule module test; … mod mk(out,ina,inb); defparam mk.cycle=6, mk.file=―../my_mem.dat‖; … endmodule
2014-4-25
34
3.2.2 变量
• 硬件描述语言中,变量的数据类型用来 表示数字电路中的物理连线、数据存储 和传输单元等物理量。
2014-4-25
35
3.2.2 数据类型
• 线网类型:表示结构化元件间的物理连 线,综合后一般为连线节点
– 网络(线网)数据类型表示结构实体之间的 物理连接 – 不能存储值,必须受到驱动值assign的驱动
10
2014-4-25
模块调用(引用)方式
• 模块的调用方式可大致分为两种:位置关联 调用方式、端口名关联调用方式。 【例】模块调用的例子。 module ha (out1,out2,in1,in2); input in1,in2; output out1,out2; …... endmodule
4
3.1 模块的结构
• Verilog 模块的结构由在module和endmodule • 关键词之间的四个主要部分组成: • - 端口信息: module block1(a, b, c, d ); • - 输入/输出说明 : input a, b, c ; • output d ; • - 内部信号: wire x; • - 功能定义: assign d = a | x ; • assign x = ( b & ~c ); 2014-4-25 • endmodule 5
2014-4-25 28
参数化设计
• 参数化设计是电路设计的重要概念之一; • 参数化功能块只要在映射过程中赋予不 同的参数,就可以得到不同的设计; • 参数化设计在IP产业中占有重要的位置; • 参数属性由其代表的参数属性决定
2014-4-25
29
参数传递举例
module decode(A,F); parameter width=1, polarity=1; endmodule module top; decode #(4,0) D1(A4,F16); decode #(5) D2(A5,F32); endmodule
• 负数
– -:放在数字定义表达式的最前面 – -8’d5
• 下画线
– 分割数的表达
2014-4-25
27
3.2.1 常量
• 参数parameter parameter 参数名1=表达式,参数名2=表达式; 表达式必须是常数表达式,只能包含数字或参数 parameter byte_size=8, byte_msb=byte_size-1;
a b
d e
c
2014-4-25
7
• “与或非”门电路 module AOI(A,B,C,D,F); input A,B,C,D; output F; wire A,B,C,D,F; assign F= ~((A&B)|(C&D)); endmodule
2014-4-25 8
3.1.1 模块的端口定义
2014-4-25
23
Verilog 的四种逻辑值
buf
0
buf buf
0、低、伪、逻辑低、地、VSS、负插入 1、高、真、逻辑高、电源、VDD、正插入
1
X
bufif1
X、不确定:逻辑冲突无法确定其逻辑值
Z
2014-4-25
HiZ、高阻抗、三态、无驱动源
24
0
3.2.1 常量
• 值不改变的量 • 数字 • 整数
2014-4-25 21
内容提要
• 3.1 模块结构 • 3.2 数据类型
2014-4-25
22
主要的数据类型
Verilog 有三种主要的数据类型:
Nets 表示器件之间的物理连接, 称为网络连接类型 Register 表示抽象的储存单元,称为寄存器/变量类型 Parameter 表示运行时的常数,称为参数类型
a b
d e
c
2014-4-25
6
编写Verilog HDL模块的练习
• 请在下面的空格中填入适当的符号 • 使其成为右图的Verilog 模块 : • module block1(a, b, c , d, e ); • input a, b, c; • output d, e ; • assign d = a | ( b & ~c) ; • assign e = ( b & ~c ); • endmodule
相关文档
最新文档