VerilogHDL基本语法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
寄存器类型:register type表示一个抽象的数 据存储单元,它只能在always语句和initial语句中 被赋值,并且它的值从一个赋值到另一个赋值被 保存下来。寄存器类型的变量具有x的缺省值。
11
变量
wire型变量
它 是 最 常 用 的 nets 型 变 量 , 常 用 来 表 示 以 assign语句赋值的组合逻辑信号。
table task tran tranif0 tranif1 time
tri triand trior trireg
tri0 tri1 vectored wait wand weak0 weak1 while wire wor xnor xor
特殊字符
$:以$开头的标识符代表系统命令
$time:返回目前的仿真时间
DQ
out1
DFF
变量
Memory类型
Verilog HDL通过对reg型变量建立数组来对存 储器建模,可以描述RAM型存储器,ROM存储 器和reg文件。
数组中的每一个单元通过一个数组索引进行寻 址。
在Verilog语言中没有多维数组存在。 memory型数据是通过扩展reg型数据的地址范 围来生成的。
开头必须由a-z, A-Z或下划线_开头 可以在标识符所取的非法名称前加上反斜杠 “\”,并在名称结尾加上空白键,这样就可以用任 何可印出的ASCII字符来当作标识符的名称了;而 反斜杠和空白键不会被视为标识符的一部分
29
标示符
合法的名字: A_99_Z Reset _54MHz_Clock$ Module
9
变量
变量即在程序运行过程中其值可以改变的量 Verilog HDL中共有19种数据类型;其中3
个最基本的数据类型为:
网络型(nets type) 寄存器型(register type ) 数组型(memory type)
10
变量
线网类型:nets type表示Verilog结构化元件 间的物理连线。它的值由驱动元件的值决定;如 果没有驱动元件连接到线网,线网的缺省值为z。
$display:显示出信号的值 $stop:停止仿真 # 时延控制 not #3 not1(sel_, sel);// instance delay #5 a = 0;b = 0;cin = 1;
// procedural statement delay
27
标示符
任何用Verilog HDL语言描述的“东西”都通 过其名字来识别,这个名字被称为标识符。
Verilog HDL 基本语法
语汇代码的编写标准 常量、变量及数据类型 关键字和标示符 运算符 语句 综合代码的编写标准
语汇代码的编写标准
规定了文本布局、命名和注释的约定,以提高 源代码的可读性和可维护性。
每个Verilog HDL源文件中只准编写一个顶层模块,也 不能把一个顶层模块分成几部分写在几个源文件中。
这个例子定义了一个名为mema的存储器, 该存储器有256个8位的存储器。该存储器 的地址范围是0到255。
注意:对存储器进行地址索引的表达式必须 是常数表达式。
22
变量
Verilog的变量的四种逻辑状态:
0:逻辑零、逻辑非、低电平 1:逻辑1、逻辑真、高电平 x或X:不定态 z或Z:高阻态
output out1, out2;
reg out1;
wire out2;
连续赋值语句
assign out2 = a ;
a
out2
always @(b)
电平触发
out1 <= ~b;
b
out1
endmodule
过程赋值语句
INV
18
变量
➢ 用reg型变量生成触发器举例:
module rw2( clk, d, out1, out2 );
模块中的输入/输出信号类型缺省为wire型。 可用做任何方程式的输入,或“assign”语句
和实例元件的输出。
12
变量
格式 wire 数据名1,数据名2, ……,数据名n;
wire型向量(总线)
wire[n-1:0] 数据名1,数据名2, ……,数据名m;

wire[n:1] 数据名1,数据名2, 每条总线
24
关键词
and always assign begin
buf bufif0 bufif1 case casex casez cmos deassign default defparam disable
edge else end endcase endfunction endprimitive endmodule endspecify endtable endtask event for force forever fork
▪ 不合法的名字: ➢ 123a ➢ $data ➢ module ➢ 7seg.v
30
运算符
算术运算符 关系运算符 相等与全等运算符 逻辑运算符 缩位运算符 位运算符 逻辑移位运算符 条件运算符 连接运算符
31
+, -, *, /, % <, <=, >, >= ==, !=, ===, !== !, &&, || &,~&, |, ~|,^, ~^,^~ ~, &, |, ^, ~^,^~ >>, << ?: {}
使用,典型应用为高层次行为建模。 ➢ time类型:无符号时间变量。 ➢ real和realtime类型:实数寄存器(或实数时间寄存器)
14
变量
register型变量与nets型变量的根本区别是: ❖register 型 变 量 需 要 被 明 确 地 赋 值 , 并 且 在被重新赋值前一直保持原值。 ❖register 型 变 量 必 须 通 过 过 程 赋 值 语 句 赋 值!不能通过assign语句赋值! ❖在过程块内被赋值的每个信号必须定义成 register型!
8
常量
参数(符号常量) 参数是一个常量,经常用于定义时延和变量的
宽度。
parameter byte_size=8; //定义一个常数参数 parameter, byte_msb=byte_size-1; //用数表达 式赋值 parameter average_delay = (r+f)/2; //用常数表 达式赋值
通过注释对源代码做必要的说明,尤其对接口(如模块 参数、端口、任务、函数变量)做必要的注释很重要。
3
语汇代码的编写标准
常量尽可能多地使用参数定义和宏定义,而不要在语句中 直接使用字母、数字和字符串。 参数定义(用一个标识符来代表一个常量)的格式 : parameter 参数名1=表达式,参数名2=表达式 ,……; 宏定义(用一个简单的宏名来代替一个复杂的表达 式)的格式: ’define 标志符(即宏名)字符串(即宏内容)
4
常量
整型数:
表达方式
说明
举例
+/- <位宽> ’<进制> <数字> <进制> <数字>
<数字>
完整的表达方式
缺省位宽,则位宽由 机器系统决定,至少 32位 缺省进制为十进制, 位宽默认为32位
8’b11000101或 8 ’hc5 hc5
197
❖注:这里位宽指对应二进制数的宽度。
5
常量
x表示不定值,z表示高阻值; “?”是z的另一种表示符号,建议在case语句
……,数据名m; 共有m
位宽为n
条总线
13
变量
register类型:
在程序块中作变量用,对信号赋值需要用该数 据类型,赋值时用关键字initial或always开始。
常用register变量
➢ reg:是最常见的数据类型,常代表触发器. ➢ integer: 32位带符号整数型变量,可以作为普通寄存器
每个向量 位宽为n
共有m个reg 型向量
➢ [例] reg[4:1] regc,regd; //regc,regd为4位宽的reg型向量
17
变量
用reg型变量生成组合逻辑举例: reg型变量既可生成触发器,
module rw1( a, b, out1, out2 ) ; input a, b;
也可生成组合逻辑; wire型 变量只能生成组合逻辑。
23
关键字
关键字——事先定义好的确认符,用来组织语 言结构;或者用于定义Verilog HDL提供的门元 件(如and,not,or,buf)。 用小写字母定义!
——如always,assign,begin,case,casex, else,end,for,function,if,input,output, repeat,table,time,while,wire
源文件名字应与文件内容有关,最好与顶层模块同名! 源文件名字的第一个字符必须是字母或下划线,不能是 数字或$符号!
每行只写一个声明语句或说明。 源代码用层层缩进的格式来写。
2
语汇代码的编写标准
定义变量名的大小写应自始至终保持一致(如变量名第 一个字母均大写)。
变量名应该有意义,而且含有一定的有关信息。局部变 量名(如循环变量)应简单扼要。
15
变量
reg型变量
定义——在过程块中被赋值的信号,往往代表触发
器,但不一定就是触发器(也可以是组合逻辑信号)!
格式 reg 数据名1,数据名2, ……,数据名n;
16
变量
reg型向量(总线)
reg[n-1:0] 数据名1,数据名2, ……,数据名m; 或 reg[n:1] 数据名1,数据名2, ……,数据名m;
input clk, d;
output out1, out2;
reg out1; wire out2;
连续赋值语句
d
assign out2 = d & ~out1 ;
always @(posedge clk)
clk
begin out1 <= d ;
上沿触发
end
endmodule
19
过程赋值语句
AND2i1 out2
关键词
rcmos real
realtime reg
release repeat rnmos rpmos rtran rtranif0 rtranif1 scalared small specify specparam
26
strength strong0 strong1 supply0 supply1
20
变量wk.baidu.com
格式:
reg [n-1:0] 存储器名[m-1:0];
reg[n-1:0]定义了存储器中每一个存储单元的 大小,即该存储单元是一个n位的寄存器。
存储器名后的[m-1:0]或[m:1]则定义了该存 储器中有多少个这样的寄存器。最后用分号结 束定义语句。
21
变量
例:
reg [7:0] mema[255:0];
中使用?表示高阻态z 为提高可读性,在较长的数字之间可用下划线_
隔开!但不可以用在<进制>和<数字>之间。 当常量未指明位宽时,默认为32位。
6
常量
17 //位宽, 基数符号不写会采用default值
(32bit十进制)
8’d32 //8-bit十进制值为32
8’h1A
8’o37
如源文件名、模块名、端口名、变量名、常 量名、实例名等。
标识符可由字母、数字、下划线和$符号构 成;但第一个字符必须是字母或下划线,不能是 数字或$符号!
在Verilog HDL中变量名是区分大小写的!
28
标示符
标识符必须是由a-z, A-Z, 0-9,_, $这些字符 組成,最長只能到1024个字符
25
function highz0 highz1 if ifnone initial inout input integer join large
macromodule medium module nand
negedge nor not notif0 notif1 nmos
or output parameter pmos posedge primitive pulldown pullup pull0 pull1
8’b0001_1100
32’bx // ”x”表unknown
4’b0???
// ”?”表示高阻
7
常量
实数 十进制计数法,科学计数法
7.2 1.8e-4 //1.8*10-4 9.5E6
字符串与字符变量 字符串为两个双引号“ ”之间的字符,不许 跨行
“This is a string!”; //共17个字符
运算符
▪ 进行整数除法运算时,结果值略去小数部分,只 取整数部分!
▪ %称为求模(或求余)运算符,要求%两侧均为整 型数据;
▪ 求模运算结果值的符号位取第一个操作数的符号 位! [例] -11%3 结果为-2
相关文档
最新文档