4_verilog_hdl语法解析
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2
Verilog HDL语法与要素
3
空白符
空白符包括:空格(\b)、制表符tab(\t)、换 行和换页。除了字符串中的空白符,Verilog中的 空白符仅仅用于分隔标识符,在编译阶段被忽略。 空白符主要使代码错落有致,阅读起来更方便。
4
initial begin ina=3’b001;inb=3’b011;end
12
Examples:
8'b11000101 //位宽为八位的二进制数11000101 8'hd5 //位宽为八位的十六进制数d5; 5'O27 //5位八进制数 4'D2 //4位十进制数2 4'B1x_01 //4位二进制数1x01 5'Hx //5位x(扩展的x),即xxxxx 4'hZ //4位z,即zzzz 8□'h□2A /*在位宽和'之间,以及进制和数值 之间允许出现空格,但 ' 和进制之间,数值间是不允许出 现空格的,比如8'□h2A、8'h2□A等形式都是不合法的 写法 */
//COUNT与count是不同的 //以下划线开头
7
转义标识符
转义标志符以符号“\”开头,以空白符结尾,可以以包含 任何字符。
Examples:
\7400 \~#@sel \OutGate //和OutGate恒等
8
关键字
Verilog语言内部已经使用的词称为关键字或
保留字,这些保留字用户不能作为变量或节点
initial begin //加入空格,换行等,使代码可读 ina = 3’b001 ; inb = 3’b011 ; end
5
注释
// 单行注释 /* 单行注释的另外一种方式 */ /* 多行注释 */ 例子:// 我是老师(√) /*我是老师*/( √ ) /*我是老师, 你们是学生*/ ( √ ) /*这是//合法的注释*/ ( √ ) /*这是/*不合法的*/注释*/(×)
14
说明:
④如果没有定义一个整数的位宽,器宽度为相应值中定 义的位数,例如:‘o721(9位八进制数);‘hAF(8位
十六进制数)
⑤ 如果定义的位宽比实际的位数长,通常在左边填0补 位。但如果数最左边一位为 x 或 z, 就相应地用 x 或 z 在左边 补 位 。 例 如 : 10’b10 ( 左 边 补 0 , 10‘b0000000010 ) ; 10’bx0x1(10‘bxxxxxxx0x1)。 反之,如果定义的位宽比实际的位数小,那么最左 边 的 位 相 应 的 被 截 断 。 例 如 : 3’b1001_0011 ( 相 当 于 3’b011);5‘H0FFF(相当于5’H1F)
6
标识符
Verilog中的标识符可以是任意一组字母、数字以及符号“$” 和“_”(下划线)的组合,但标识符的第一个字符必须是字
母或者下划线,不能以数字或美元符号开始,以美元符开始
的标识符是为系统函数保留的。另外,标识符是区分大小写 的。标识符最长可以包含1023个字符。 Examples: count COUNT _A1_d2 R56_68 FIVE
例子(半加器)
module HalfAdder (A, B, Sum Carry); input A, B; output Sum, Carry; assign Sum = A ^ B; //^ denotes XOR assign Carry = A & B; // & denotes AND endmodule
名字使用。
关键字都是小写的。
9
练习
1 下列标识符哪些是合法的,哪些是错误的?
Cout,
8sum, \a*b,
_data,
\wait, initial, $latch 注:标志符是 用户在编程时给Verilog HDL对象起 的名字,模块,端口和实例的名字都是标志符。
10源自文库
常量
程序运行中,值不能被改变的量称为常量
15
说明:
⑥“?”是高阻态z的另一种表示符号。在数字的表示中, 字符“?”和 Z(或 z )是完全等价的,可互相替代,使
用“?”的目的在于增强casex和casez语句的可读性
⑦ 整数可以带符号(正负号),并且正、负号应写在 最左边。负数通常表示为二进制补码的形式。 ⑧ 当默认位宽与进制时代表十进制的数。例如: 32 (代表十进制数32);-15(代表十进制数-15)
⑨ 在位宽和‘之间,以及进制和数值之间允许出现空 格,但’和进制之间以及数值之间是不允许出现空格的
13
说明:
① 在 较 长 的 数 之 间 可 用 下 划 线 分 开 , 如 16‘b1010_1101_0010_1001,其中下划线只是用来提高可
读性,但是数字的第1个字符不能是下划线,下划线也不
能用在位宽和进制处,只能用在具体的数字之间。 ② 当数字不说明位宽时,默认值为32位 ③ x(或z)在二进制中代表1位x或z,在八进制中代表 3位x(或z),在十六进制值中代表4为x(或z),其代表 的宽度取决于所用的进制 ,例: 8‘b1001xxxx (等价于 8‘b9x ); 8‘b1010zzzz(等价于8‘baz )
(constants),Verilog中的常量主要有如下3
种类型:
◆ 整数
◆ 实数
◆ 字符串
11
整数
整数按如下方式书写:
+/-<size> '<base><value>
即 +/-<位宽>'<进制><数字> size 为对应二进制数的宽度;base为进制;value是基于进 制的数字序列。 进制有如下4种表示形式: ◆ 二进制(b或B) ◆ 十进制(d或D或缺省) ◆ 十六进制(h或H) ◆ 八进制(o或O)
Verilog HDL 语法1
1
module
通用定义 module module_name ( port_list ); (模块名称(端口列表)) port declarations; (端口声明:输入,输出) … variable declaration; (变量声明) … description of behavior (逻辑功能描述) endmodule