Verilog 语言规则
Verilog语法入门,初学者必看

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字符串是双引号括起来的一个字符队列。
对于字符串的限制是,它必须在一行中书写完,不可书写在多行中,也不能包含回车符。
自己总结的verilog规则

39、时序逻辑电路中if条件下一般用<=运算符
40、if()
begin
……
end
else if()
begin
……
end
else if()
begin
input ;
reg ;
integer ;
……
begin
……
end
24、reg mema [7:0](8个1位寄存器构成组成)reg [7:0] mema(1个8为寄存器)可用mema[4]引用前者。
25、并行块:fork...join(不可用于RTL代码设计,只可用于测试代码) 顺序块begin...end
26、initial和fork...join均不可综合
括号可为空,此时不断循环,另外begin与end间被赋值的变量必须为reg型直接用=赋值
always@()
begin
#10 clk=1;
#10 clk=0;
else
例:边沿触发 always@(negedge clk)
...
11、仿真时用initial类似always,不可综合
12、例化时实参与形参顺序相同则不需写形参,若形参、实参都写则可调换顺序
13、assign并不需要在always中,也可以在外面
44、任务的定义与调用
task my_task;
input a,b;
output c,d;
一个或多个赋值表达式;
endtask(无分号)
end
可在其中使用if语句
9、always可用于描述组合逻辑电路
也可用于描述时序逻辑电路,区别在于时序电路敏感信号一般为上升沿或下降沿
Verilog语言的基本语法规则

3.标识符和关键词
标识符:给对象(如模块名、电路的输入与输出端口、变量等)
取名所用的字符串。以英文字母或下划线开始
如,clk、counter8、_net、bus_A 。
关键词:是Verilog语言本身规定的特殊字符串,用来定义语言 的结构。例如,module、endmodule、input、output、wire、 reg、and等都是关键词。关键词都是小写,关键词不能作为标 识符使用 。
6.字符串:字符串是双撇号内的字符序列
十进制记数法 如: 0.1、2.0、5.67 实数型常量
科学记数法 如: 23_5.1e2、5E-4
23510.0、 0.0005
Verilog允许用参数定义语句定义一个标识符来代表一个常量,称
为符号常量。定义的格式为:
parameter 参数名1=常量表达式1,参数名2=常量表达式
2,……;如 parameter BIT=1, BYTE=8, PI=3.14;
4.逻辑值集合
为了表示数字逻辑电路的逻辑状态,Verilog语言规定了
4种基本的逻辑值。 0
逻辑0、逻辑假
1 x或X z或Z
逻辑1、逻辑真 不确定的值(未知状态) 高阻态
5.常量及其表示
整数型
十进制数的形式的表示方法:表示有符号常量 例如:30、-2
带基数的形式的表示方法: 表示常量
常量
格式为:<+/-><位宽>’<基数符号><数 例值如>:3’b101、5’o37、8’he3,8’b1001_0011
Verilog语言的基本语法规则
为对数字电路进行描述(常称为建模),Verilog语言规定 了一套完整的语法结构。
2024版Verilog编程规范(华为)

实现自动化测试流程,提高测试 效率和准确性。
06
代码审查与质量保证
代码审查流程介绍
提交代码
开发人员将代码提交到代码审查 系统中。
分配审查任务
系统或审查组长将审查任务分配 给审查人员。
代码审查
审查人员对代码进行逐行审查, 检查是否符合编程规范和质量要
求。
审查通过
经过多轮反馈和整改后,代码符 合要求,审查通过。
通过定期的培训、分享和宣传活动,提高开 发人员对Verilog编程规范的认识和重视程度。
引入自动化检查工具
建立持续改进机制
研究和引入自动化检查工具,对Verilog代码 进行静态分析和规范检查,进一步提高代码 质量和开发效率。
建立规范的持续改进机制,收集开发人员的 反馈和建议,及时调整和优化规范内容。
可重用性原则
模块应具有高内聚、低耦 合的特点,便于在不同项 目中重用。
可维护性原则
模块应易于理解、测试和 修改,以降低维护成本。
顶层结构设计方法
自顶向下设计
从系统整体需求出发,逐 步细化到各个模块的设计 和实现。
模块化设计
将系统划分为多个独立的 模块,每个模块承担一定 的功能,便于并行开发和 维护。
减少错误和提高代码质量
02
规范的编程习惯有助于减少编码过程中的错误,提高代码的稳
定性和可靠性。
促进知识共享和传承
03
统一的编程规范有利于知识的积累和传承,降低新人学习成本,
提高团队整体技术水平。
适用范围及对象
适用范围
本规范适用于使用Verilog语言进 行硬件描述和设计的所有场景,包 括但不限于数字电路设计、验证、 仿真等。
端口名应避免与模块内部变量名冲突。
了解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】常数表示方法举例。
第2章 Verilog 语言规则

举例:
reg a; //一个标量寄存器 wand w; // 一个标量wand类型net reg [3: 0] v; // 从MSB到LSB的4位寄存器向量 reg [7: 0] m, n; // 两个8位寄存器 tri [15: 0] busa; // 16位三态总线 wire [0: 31] w1, w2; // 两个32位wire,MSB为bit0
下面所列是常出的错误及相应的错误信息(error message)
用过程语句给一个net类型的或忘记声明类型的信号赋值。 信息:illegal …… assignment. 将实例的输出连接到声明为register类型的信号上。 信息:<name> has illegal output port specification. 将模块的输入信号声明为register类型。 信息:incompatible declaration, <signal name> ……
net类型 wire, tri supply1, supply0 wor, trior wand, triand trireg tri1, tri0 功 能 标准内部连接线(缺省) 电源和地 多驱动源线或 多驱动源线与 能保存电荷的net 无驱动时上拉/下拉
综合编译 器不支持 的net类型
VERILOG语言编写规范
VERILOG语言编写规范1 目的本规范的目的是提高书写代码的可读性可修改性可重用性,优化代码综合和仿真结果,指导设计工程师使用VerilogHDL规范代码和优化电路,规范化公司的ASIC设计输入从而做到1. 逻辑功能正确2.可快速仿真3. 综合结果最优如果是hardware model)4. 可读性较好。
2 范围本规范涉及Verilog HDL编码风格,编码中应注意的问题, Testbench的编码等。
本规范适用于Verilog model的任何一级( RTL behavioral, gate_level),也适用于出于仿真,综合或二者结合的目的而设计的模块。
3 定义Verilog HDL : Verilog 硬件描述语言FSM :有限状态机伪路径:静态时序分析( STA)认为是时序失败,而设计者认为是正确的路径4 引用标准和参考资料下列标准包含的条文通过在本标准中引用而构成本标准的条文在标准出版时所示版本均为有效所有标准都会被修订使用本标准的各方应探讨使用下列标准最新版本的可能性Actel HDLCoding Style GuiderSun MicrosystemsRevision 1.0VerilogStyle and Coding Guidelines5 规范内容5.1 Verilog 编码风格本章节中提到的Verilog编码规则和建议适应于 Verilog model的任何一级( RTL behavioral,gate_level) 也适用于出于仿真,综合或二者结合的目的而设计的模块。
5.1.1 命名规范选择有意义的信号和变量名,对设计是十分重要的。
命名包含信号或变量诸如出处,有效状态等基本含义下面给出一些命名的规则。
1. 用有意义而有效的名字有效的命名有时并不是要求将功能描述出来如For ( I = 0; I < 1024; I = I + 1 )Mem[I]<= #1 32’b0;For 语句中的循环指针I 就没必要用loop_index作为指针名。
verilog语法和要素
reg
integer real time
常用的寄存器型变量
32位带符号整型变量 64位带符号实型变量 64位无符号时间变量
√ √
reg型变量是最常用的一种variable型变量。定义格式
reg型
如下: reg 数据名1,数据名2,……数据名n; reg a,b; //定义了两个reg型变量a,b reg[n-1:0] 数据名1,数据名2,……数据名i; reg[n:1] 数据名1,数据名2,……数据名i; Examples:
关键字(Keywords)
Verilog语言内部已经使用的词称为关键字或保留字,
这些保留字用户不能作为变量或节点名字使用。 关键字都是小写的。比如:AIWAYS(标识符),不是
关键字,它与关键字always是不同的。 附录A和附录B列出了verilog语言中的所有关键字。
5.2 常量
程序运行中,值不能被改变的量称为 常量(constants),Verilog中的常量主 要有如下3种类型:
主要内容
5.1 Verilog语言要素 5.2 常量 5.3 数据类型 5.4 参数 5.5 向量 5.6 运算符
5.1 Verilog语言要素
Verilog 程序由符号流构成,符号包括 空白符(White space) 注释(Comments) 操作符(Operators) 数字(Numbers) 字符串(Strings) 标识符(Identifiers) 关键字(Keywords)等
【例5.3】 采用参数定义的加法器 module add_w(a,b,sum); parameter MSB=15; //参数定义 input[MSB:0] a,b; output[MSB+1:0] sum; assign sum=a+b; endmodule
第2章 Verilog 语言规则
<reg_type> [range] <reg_name>[, reg_name]; reg_type:寄存器类型 range: 矢量范围,以[MSB:LSB]格式。只对reg类型有效 reg_name :寄存器名称,一次可定义多个寄存器,用逗号分开
Verilog中net和register声明语法
example.v
修改前:
修改后: module example(o1, o2, a, b, c, d);
module example(o1, o2, a, b, c, d);
input a, b, c, d;
input a, b, c, d;
output o1, o2;
output o1, o2;
举例:
reg a; //一个标量寄存器 wand w; // 一个标量wand类型net reg [3: 0] v; // 从MSB到LSB的4位寄存器向量 reg [7: 0] m, n; // 两个8位寄存器 tri [15: 0] busa; // 16位三态总线 wire [0: 31] w1, w2; // 两个32位wire,MSB为bit0
DUT u1 (y, a, b) ;
wire Y, A, B;
initial begin
and (Y, A, B) ;
a = 0; b = 0;
endmodule
#5 a = 1;
end
在过程块中只能给 register类型赋值
endmodule
信号类型确定方法总结如下:
• 信号可以分为端口信号和内部信号。出现在端口列表中的 信号是端口信号,其它的信号为内部信号。
trireg类型很象wire类型,但trireg类型在没有驱动 时保持以前的值。这个值的强度随时间减弱。
Verilog语言编程规范
Verilog语⾔编程规范前⾔.................................................................... IV 1范围 (1)2术语 (1)3代码标准 (1)3.1命名规范 (1)3.1.1⽂件命名 (1)3.1.2HDL代码命名总则 (2)3.2注释 (4)3.2.1⽂件头 (4)3.2.2其它注释 (5)3.3编程风格 (7)3.3.1编写代码格式要整齐 (7)3.3.2使⽤⼆到四个空格符缩排 (7)3.3.3⼀⾏⼀条Verilog语句 (7)3.3.4⼀⾏⼀个端⼝声明 (7)3.3.5在定义端⼝时,按照端⼝类型或端⼝功能定义端⼝顺序。
(8) 3.3.6保持端⼝顺序⼀致。
(8)3.3.7声明内部net (8)3.3.8在⼀个段内声明所有内部net (8)3.3.9每⾏长度不超过80字符....................... 错误!未定义书签。
3.3.10代码流中不同结构之间⽤⼀空⾏隔开 (8)3.4模块划分和重⽤ (10)3.4.1不能访问模块外部的net和variable (10)3.4.2不使⽤`include编译指令 (10)3.4.3建议模块的端⼝信号尽可能少。
(10)3.4.4时钟产⽣电路单独构成⼀个模块 (10)3.4.5划分时钟域 (10)3.4.6物理和逻辑边界的匹配 (10)3.4.7特定应⽤代码要单独划分出来 (10)3.4.8关键时序逻辑划分 (10)3.4.9数据流逻辑划分 (11)3.4.10异步逻辑划分 (11)3.4.11状态机划分 (11)3.4.12控制逻辑和存储器划分 (11)3.5逻辑设计经验 (11)3.5.1时钟域要尽可能少,所⽤时钟尽可能加全局BUFF (11) 3.5.2异步接⼝信号同步化 (11)3.5.3避免寄存器的数据与时钟异步 (11)3.5.4使⽤⽆⽑刺的门控时钟使能信号 (11)3.5.5直接作⽤信号⽆⽑刺 (11)3.5.6初始化控制存储元件 (12)3.5.7使⽤同步设计 (12)3.5.8避免组合反馈环 (12)3.6常⽤编程技巧 (12)3.6.1条件表达式的值必须是⼀个单bit值 (12)3.6.2总线位顺序按⾼到低保持⼀致 (12)3.6.3不要给信号赋x值 (12)3.6.4寄存器变量只能在⼀个always语句中赋值 (12)3.6.5对常量使⽤参数⽽不使⽤⽂本宏 (12)3.6.6不能重复定义参数 (12)3.6.7不能重复定义⽂本宏 (12)3.6.8保持常量之间的联系 (12)3.6.9状态编码的参数使⽤ (13)3.6.10`define、`undef配合使⽤ (13)3.6.11⽤基地址+地址偏移量⽣成地址 (13)3.6.12使⽤⽂本宏表⽰寄存器字段位置和值 (13)3.6.13`ifdef的嵌套限制在三层以内 (13)3.6.14操作数的位宽必须匹配 (13)3.6.15模块调⽤时端⼝要显式引⽤ (14)3.6.16⽮量端⼝和net/variable声明的位宽要匹配 (14)3.6.17避免inout类型的端⼝ (14)3.6.18在复杂的表达式中使⽤括号 (14)3.7常⽤综合标准 (14)3.7.1always 的敏感列表要完整 (14)3.7.2⼀个 always 的敏感列表中只能有⼀个时钟 (14)3.7.3只使⽤可综合的结构 (15)3.7.4组合逻辑的条件需完备 (15)3.7.5循环结构中禁⽤disable语句 (15)3.7.6避免⽆界循环 (15)3.7.7端⼝连接禁⽤表达式 (15)3.7.8禁⽤Verilog primitive (15)3.7.9边沿敏感结构中使⽤⾮阻塞赋值(<=) (15)3.7.10Latch使⽤⾮阻塞赋值 (15)3.7.11模块闲置的输⼊端不要悬空 (15)3.7.12连接模块闲置的输出端 (16)3.7.13函数中不要使⽤锁存器 (16)3.7.14禁⽤casex (16)3.7.15多周期路径的信号使⽤单周期使能信号 (16)3.7.16三态元件建模 (16)3.7.17避免顶层胶合逻辑 (16)3.7.18在case语句中使⽤default赋值语句 (16)3.7.19full_case综合命令的使⽤ (16)附录1 HDL编译器不⽀持的Verilog结构 (18)附录2 Verilog和VHDL关键词列表 (19)前⾔编写本标准的⽬的是为了统⼀部门内部FPGA\EPLD设计⽤verilog语⾔编程风格,提⾼Verilog设计源代码的可读性、可靠性和可重⽤性,减少维护成本,最终提⾼产品⽣产⼒;并且以此作为代码⾛查的标准。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验与设计
9-2 等精度频率 脉宽/占空比 相位多功能测试仪设计 等精度频率/脉宽 占空比 脉宽 占空比/相位多功能测试仪设计
接下页
实验与设计
9-2 等精度频率 脉宽/占空比 相位多功能测试仪设计 等精度频率/脉宽 占空比 脉宽 占空比/相位多功能测试仪设计
实验与设计
9-2 等精度频率 脉宽/占空比 相位多功能测试仪设计 等精度频率/脉宽 占空比 脉宽 占空比/相位多功能测试仪设计
第9章 章 Verilog语言规则 语言规则
9.1 文字规则
1. 整数
9.1 文字规则
2. 实数
3. 字符串
9.1 文字规则
4. 标识符
5. 关键词
9.2 数据类型
9.2.1 net网线类型 网线类型
9.2.2 register寄存器类型 寄存器类型
9.2.3 存储器类型
9.3 操作符
1. 逻辑操作符
9-2 等精度频率 脉宽/占空比 相位多功能测试仪设计 等精度频率/脉宽 占空比 脉宽 占空比/相位多功能测试仪设计
实验与设计
9-2 等精度频率 脉宽/占空比 相位多功能测试仪设计 等精度频率/脉宽 占空比 脉宽 占空比/相位多功能测试仪设计
实验与设计
9-2 等精度频率 脉宽/占空比 相位多功能测试仪设计 等精度频率/脉宽 占空比 脉宽 占空比/相位多功能测试仪设计
9.4.4 任务和函数语句 1.任务(task)语句 任务( 任务 )
9.4 基本语句
9.4.4 任务和函数语句 1.任务(task)语句 任务( 任务 )
9.4 基本语句
9.4.4 任务和函数语句 1.任务(task)语句 任务( 任务 )
9.4 基本语句
2.函数(function)语句 函数( 函数 )
实验与设计
9-2 等精度频率 脉宽/占空比 相位多功能测试仪设计 等精度频率/脉宽 占空比 脉宽 占空比/相位多功能测试仪设计
实验与设计
9-2 等精度频率 脉宽/占空比 相位多功能测试仪设计 等精度频率/脉宽 占空比 脉宽 占空比/相位多功能测试仪设计
实验与设计
9-2 等精度频率 脉宽/占空比 相位多功能测试仪设计 等精度频率/脉宽 占空比 脉宽 占空比/相位多功能测试仪设计
9.4 基本语句
2.函数(function)语句 函数( 函数 )
9.4 基本语句
2.函数(function)语句 函数( 函数 )
9.5 用库元件实现结构描述
9.5 用库元件实现结构描述
习
题
实验与设计
9-1 乐曲硬件演奏电路设计
实验与设计
9-1 乐曲硬件演奏电路设计
实验与设计
9-1 乐曲硬件演奏电路设计
实验率/脉宽 占空比 脉宽 占空比/相位多功能测试仪设计
实验与设计
9-2 等精度频率 脉宽/占空比 相位多功能测试仪设计 等精度频率/脉宽 占空比 脉宽 占空比/相位多功能测试仪设计
实验与设计
9-3 正交幅度调制与解调系统实现
实验与设计
9-3 正交幅度调制与解调系统实现
实验与设计
9-4 基于 基于UART串口控制的模型电子琴设计 串口控制的模型电子琴设计
实验与设计
9-4 基于 基于UART串口控制的模型电子琴设计 串口控制的模型电子琴设计
实验与设计
9-4 基于 基于UART串口控制的模型电子琴设计 串口控制的模型电子琴设计
9.4 基本语句
9.4.3 编译指示语句 1. 文件包含语句 文件包含语句`include
9.4 基本语句
2. 条件编译语句 条件编译语句`ifdef、`else、`endif 、 、
9.4 基本语句
2. 条件编译语句 条件编译语句`ifdef、`else、`endif 、 、
9.4 基本语句
实验与设计
9-4 基于 基于UART串口控制的模型电子琴设计 串口控制的模型电子琴设计
实验与设计
9-8 PS2键盘控制模型电子琴电路设计 键盘控制模型电子琴电路设计
实验与设计
9-8 PS2键盘控制模型电子琴电路设计 键盘控制模型电子琴电路设计
2. 缩位操作符 &(与)、~&(与非)、 (或)、 (或非)、 (异或)、 ( )、 )、|( )、~|(或非)、 )、^(异或)、 )、^~,~^(同或)。 (与非)、 , (同或)。
9.4 基本语句
9.4.1 initial过程语句 过程语句
9.4 基本语句
9.4.2 forever循环语句 循环语句
实验与设计
9-1 乐曲硬件演奏电路设计
实验与设计
9-1 乐曲硬件演奏电路设计
实验与设计
9-1 乐曲硬件演奏电路设计
实验与设计
9-1 乐曲硬件演奏电路设计
实验与设计
9-2 等精度频率 脉宽/占空比 相位多功能测试仪设计 等精度频率/脉宽 占空比 脉宽 占空比/相位多功能测试仪设计
实验与设计