第2章 Verilog 语言规则(修改)

合集下载

自己总结的verilog规则

自己总结的verilog规则
38、并位操作符{}
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可用于描述组合逻辑电路
也可用于描述时序逻辑电路,区别在于时序电路敏感信号一般为上升沿或下降沿

第04讲 Verilog-HDL语法——第2部分 语法要点

第04讲 Verilog-HDL语法——第2部分 语法要点

` timescale
`timescale 说明延时单位及延时精度
格式:`timescale <time_unit> / <time_precision> 如:`timescale 1 ns / 100 ps
`timescale必须在模块之前出现 `timescale 1 ns / 100 ps // All time units are in multiples of 1 nanosecond module MUX2_1 (out, a, b, sel); output out; input a, b, sel; wire sel_;
12 'H83a 8'b1100_ 0001 64'hff01 9'O17 32'bz01x 3’b1010_ 1101 6.3 32e- 4 4.1E3 unsized decimal (zero-extended to 32 bits) unsized hexadecimal (zero- extended to 32 bits) 8-bit binary 64-bit hexadecimal (zero- extended to 64 bits) 9-bit octal Z-extended to 32 bits 3-bit number, truncated to 3’b101 decimal notation scientific notation for 0.0032 scientific notation for 4100
hex
oct
dec
bin
ACSII
string
time
strength module
转义符
\t \n \\ \” %% \<1-3 digit octal number>

《Verilog HDL数字设计与综合(第二版)》教学课件—第2章

《Verilog HDL数字设计与综合(第二版)》教学课件—第2章
Page ▪ 14
2.6 自顶向下的设计实例
▪ 例2.3 脉动进位计数器顶层模块
Page ▪ 15
2.6自顶向下的设计实例(续)
▪ 例2.4 触发器T_FF
Page ▪ 16
2.6自顶向下的设计实例(续)
▪ 例2.5 带异步复位的D触发器 D_FF
Page ▪ 17
▪ 例2.6 激励模块
Page ▪ 18
▪ 在自底向上的设计方法恰好与此相反:我们不断地使用较小的功能块来搭建大一些 的模块。首先使用与门和或门搭建D触发器,或者使用晶体管搭建一个自定义的D触 发器,使自底向上和自顶向下的方法在D触发器这个层次上会合。
Page ▪ 4
2.3 模块
▪ Verilog使用模块(module)的概念来代表一个基本的功能块。一个模块可 以是一个元件,也可以是低层次模块的组合。常用的设计方法是使用元件 构建在设计中多个地方使用的功能块,以便进行代码重用。模块通过接口 (输入和输出)被高层的模块调用,但隐藏了内部的实现细节。这样就使 得设计者可以方便地对某个模块进行修改,而不影响设计的其他部分。
Page ▪ 2
2.1 设计方法学
▪两种基本的设计方法:自底向上和自顶向下设计方法 ▪ 自底向上设计方法:
首先定义顶层功能块,进而分析需要 哪些必要的子模块;然后进一步对各 个子模块进行分解,直到达到无法进 一步分解的底层功能块 ▪ 自顶向下设计方法: 首先对现有的功能块进行分析,然后 使用这些模块来搭建规模大一些的功 能块,如此继续直至顶层模块
Page ▪ 7
2.3 模块(续)
▪ Verilog允许设计者在一个模块中混合使用多个抽象层次。在数字电路设计 中,术语寄存器传输级(RTL)描述在很多情况下是指能够被逻辑综合工 具接受的行为级和数据流级的混合描述。

了解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】常数表示方法举例。

Verilog程序编写规范

Verilog程序编写规范

Verilog程序编写规范在满足功能和性能目标的前提下,增强代码的可读性、可移植性,首要的工作是在项目开发之前为整个设计团队建立一个命名约定和缩略语清单,以文档的形式记录下来,并要求每位设计人员在代码编写过程中都要严格遵守。

良好代码编写风格的通则概括如下:一、命名规则(1)对所有的信号名、变量名和端口名都用小写,这样做是为了和业界的习惯保持一致;对参数名、常量名和用户定义的类型用大写;(2)使用有意义的信号名、端口名、函数名和参数名;(3)信号名长度不超过20个字符;(4)对于时钟信号使用clk 作为信号名,如果设计中存在多个时钟,使用clk作为时钟信号的前缀;(5)对来自同一驱动源的信号在不同的子模块中采用相同的名字,这要求在芯片总体设计时就定义好顶层子模块间连线的名字,端口和连接端口的信号尽可能采用相同的名字;(6)对于低电平有效的信号,应该以一个下划线跟一个小写字母b 或n 表示。

注意在同一个设计中要使用同一个小写字母表示低电平有效;(7)对于复位信号使用reset 作为信号名,如果复位信号是低电平有效,建议使用reset_n;(8)当描述多比特总线时,使用一致的定义顺序,采用从高到低的定义顺序。

对于verilog 建议采用bus_signal[x:0]的表示;(9)尽量遵循业界已经习惯的一些约定。

如*_r 表示寄存器输出,*_a 表示异步信号,*_pn 表示多周期路径第n 个周期使用的信号,*_nxt 表示锁存前的信号,*_z 表示三态信号等;二、文档结构(10)在源文件、批处理文件的开始应该包含一个文件头、文件头一般包含的内容如下例所示:文件名,作者,模块的实现功能概述和关键特性描述,文件创建和修改的记录,包括修改时间,修改的内容等;// +FHDR-------------------------------------------------------------------// Copyright @ 2008, State Key Laboratory of Advanced Optical Communication Systems & Networks, PKU // ----- -----------------------------------------------------------------------// FILE NAME:// AUTHOR:// DATA OF CREATION:// -----------------------------------------------------------------------------// PURPOSE://// --- -----------------------------------------------------------------------// RELEASE HISTORY:// DATA AUTHOR DESCRIPTION//// --- -----------------------------------------------------------------------// -FHDR-------------------------------------------------------------------//(11)使用适当的注释来解释所有的进程、函数、端口定义、信号含义、变量含义或信号组、变量组的意义等。

VerilogHDL语言(PDF)

VerilogHDL语言(PDF)

Verilog 讲义(二)1)续Verilog 基础2)Verilog 形为描述3.4 运算符九类运算符分类包含运算符算术运算符+ - * / %位运算符~ & | ^ ^~or~^缩位运算符& ~& | ~| ^ ^~or~^逻辑运算符! && ||关系运算符> < <= >=相等与全等运算符== != === !==逻辑移位运算符 <<>> 连接运算符 {}: 条件运算符 ?根据操作数的不同,又可分为三类:1)单目运算符只有一个操作数,且运算符位于操作数的左边如:~clk &a ~& 缩位运算符wire [7:0] aparity=^a (奇校验)2)双目运算符a+b a%b {a,b,c}3)三目运算符out=(sel)?a:b;运算符的优先级参:P443.4.1 算术运算符1)减法亦可用作单目运算符,取补运算2)除法运算符:整型类数据小数部分被截去: integer a=7/2=33)% 取余运算 7%2=13.4.2 位运算符1)~a 按位取反2)a&b 按位相与若a,b 位数不同,短的高位补0,(x者补x)3)^ ^~ 双目3.4.3 缩位运算符单目运算符,按位进行逻辑运算,结果产生一位的逻辑值。

A=4’b1001&a ~&a |a ~|a ^a ~^a0 1 1 0 1 0 3.4.3 逻辑运算符a&&b结果为一位的逻辑值若操作数为多位,只要有一位为1,整个操作数看作逻辑1;若有不定态,结果亦为不定态。

3.4.5关系运算符结果为一位的逻辑值。

3.4.6 相等与全等运算符结果为一位逻辑值相等:比较每一位,所有相等,关系满足,若有不定态或高阻态,不定态结果。

全等:与相等比较过程相同,亦将不定态及高阻态作为逻辑状态比较。

3.4.7 逻辑移位运算符<< >> 以0补位。

关于VerilogHDL编写规则的说明

关于VerilogHDL编写规则的说明

关于V erilogHDL编写规则的说明摘自“Comprehensive SRS V3 Standards—Semiconductor Reuse Standard”7 V erilog HDL 编码7.1 前言V erilog HDL编码标准属于虚拟部件生成一部分,用于对编码中的命名习惯、代码文档和代码格式风格的说明。

对相应规则的遵从能够简化重用,并从代码中抽象出其精华,使得代码可读性增强且兼容大多数工具。

除特别声明,任何与标准不一致的地方必须纠正而且以文档说明。

该标准确保在各种应用中代码的高度适应性,以此提升了重用性。

本文档的目的就是确保门级实现与标准的V erilog仿真器一致。

分割会影响针对应用的适应性。

建模实践小节处理在综合环境中很难描述清楚而又必须确保前后综合的一致性结构。

该标准可应用于行为和综合代码。

而且,还可以应用于其它的V erilog代码中如测试台、监视器等。

某些标准明确说明其应用代码的类型,如有例外会标出。

所描述的规则肯定是在快速Soc设计、集成、生产及维护过程中必须的要求项。

注意到在许多情况下,简单的介绍也能适应要求,但是,介绍会带来大量的例外、工具限制或一些深度的使用习惯,而这些与规则相悖。

7.1.1可交付的列表在第2部分VC块可交付列表已经定义了IP库形式。

包括:可综合的RTL源代码(L1)测试台(V1)驱动(V2)监视器(V3)详细行为建模(V4)短小模型(V6)形式模型验证(V12)7.2参考信息7.2.1参考文档略7.2.2术语基地址:偏移量相对的地址HDL:硬件描述语言屏蔽拴:物理上,屏蔽拴指一条连接到VDD或VSS,或者二个输入的选择输出线,用于对模块的配置而不会影响模块内部。

该设置能够在更改配置时避免重综合。

PLL:锁相环RTL:文本宏顶层模块:在VC设计层次中最高模块。

UDP:用户定义原语7.3命名规则7.3.1文件命名R7.3.1 一个文件一个模块一个文件最多可以有一个模块。

VERILOG语言编写规范

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作为指针名。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

注意integer和reg 类型在算术运算 时的差别。integer 是有符号数,而 reg是无符号数。
wire和tri类型有相同的功能。用户可根据需要将线网定义 为wire或tri以提高可读性。例如,可以用tri类型表示一个 net有多个驱动源。或者将一个net声明为tri以指示这个 net可以是高阻态Z(hign-impedance)。可推广至wand 和triand、wor和trior
wand、wor有线逻辑功能;与wire的区别见上页的表。
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
信号类型确定方法总结如下:
• 信号可以分为端口信号和内部信号。出现在端口列表中的 信号是端口信号,其它的信号为内部信号。
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;
若未注明位宽,仅标注进制,则宽度对应数的 位数。‘O466=9’O466
整数可以在其前面加正负号,但不能放在进制 内。
如果定义的位宽比实际要短,则多余位从高位 截;若定义的位宽比实际要长,则从高位补0, 若最高位是X或Z,则高位补X或Z。
判断对错
(1) 168 =32’h0000_00A8 √
(2) -5
=32’hFFFFFFFB √
(3) ‘H78
=8’H78 √
(4) 7’D-30
(5) 5’B11 =5’B00011 √
(6) 5’BX101 =5’BXX101 √
(7) 5’BZZXX1 √
9.1 文字规则
2. 实数
Verilog 语言可以将实数转换为整数,通过四舍五 入的方法转换为最接近的整数。
Verilog根据表达式中变量的长度对表达式的值 自动地进行调整。
Verilog自动截断或扩展赋值语句中右边的值以 适应左边变量的长度。
当一个负数赋值给无符号变量如reg时,
Verilog自动完成二进制补码计算
module sign_size;
reg [3:0] a, b;
reg [15:0] c;
(2)必须以英文字母或下划线开头。 (3) 必须是单下划线,且其前后都必须是英文
字母或数字。
9.1 文字规则
(4)标识符中英文字母区分大小写。 (5)允许包含图形符号(如回车符、换行
符等),也允许包含空格。
9.1 文字规则
判断正误
5. 关键词 :是Verilog语言中已经定义的一系 列标识符的保留字
9.2 数 据 类 型
Verilog的数据类型及逻辑系统
学习内容:
学习Verilog逻辑值系统 学习Verilog中不同类的数据类型 理解每种数据类型的用途及用法 数据类型说明的语法
Verilog采用的四值逻辑系统
’0’, Low, False, Logic Low, Ground,VSS, Negative Assertion
==
等于
!=
不等于
===
全等
!==
不全等
6.缩位运算符(Reduction operators)
&

~&
与非
|

~|
或非
^
异或
^~,~^
同或
7.移位运算符(shift operators)
>>
右移
<<
左移
8.条件运算符(conditional operators)
?: 三目运算符,其定义方式如下:
信号=条件?表达式1:表达式2; 当条件成立时,信号取表达式1的值,反之 取表达式2的值。
9.位拼接运算符(concatenation operators)
{}
该运算符将两个或多个信号的某些位拼接起来。 使用如下:
{信号1的某几位,信号2的某几位,……,信 号n的某几位}
Verilog中的大小(size)与符号
寄存器型声明
<reg_type> [range] <reg_name>[, reg_name];
Verilog中net和register声明语法
举例:
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
trireg类型很象wire类型,但trireg类型在没有驱动时保持 以前的值。这个值的强度随时间减弱。
寄存器类 (register)
寄存器类型在赋新值以前保持原值
寄存器类型大量应用于行为模型描述及激励描述。在 下面的例子中,reg_a、reg_b、reg_sel用于施加激 励给2:1多路器。
主要数据类型
Verilog主要有三类(class)数据类型: net (线网) : 表示器件之间的物理连接 register (寄存器) :表示抽象存储元件 parameters(参数) : 运行时的常数(run-time onstants)
net(线网)
net需要被持续的驱动,驱动它的可以是门和模块。 当net驱动器的值发生变化时, Verilog自动的将新值传送到net上。
位运算,即将两个操作数按对应位分别进行逻 辑运算。
~
按位取反
&
按位与
|
按位或
^
按位异或
^~,~^ 按位同或(符号^~与~^是等价的)
4.关系运算符(Relational operators)
<
小于
<=
小于或等于
>
大于
>=
大于或等于
5.等式运算符(Equality Operators)
第9章 Verilog语言规则
9.1 文字规则
常量(或常数)
整数类型(integer)(32位):可以被综合。 实数类型(real)(32位) 不可综合 字符串类型(strings)
9.1 文字规则
1. 整数
注意:
为了增加可读性,在较长的数间可用下划线分 开。
若不注明位宽和进制,或仅用D注明进制时, 都是十进制。如:123,’D12
将实例的输出连接到声明为register类型的信号上。 信息:<name> has illegal output port
specification. 将模块的输入信号声明为register类型。
信息:incompatible declaration, <signal name> ……
选择数据类型时常犯的错误举例
功能
标准内部连接线(缺省) 电源和地 多驱动源线或 多驱动源线与 能保存电荷的net 无驱动时上拉/下拉
没有声明的net的缺省类型为 1 位(标量)wire类型。 但这个缺省类型可由下面的编译指导改变:
`default_nettype <nettype>
net类的类型(线网)
wire类型是最常用的类型,只有连接功能。
3. 字符串(文字字符串和数位字符串) (1)文字字符串:用双引号括起来的一串
文字,一个字符串不能分成多行书写。 其宽度 为字符串中字符的个数乘以8.
(2)数位字符串也称位矢量,与文字字符串相 似,但所代表的是二进制、八进制或十六进制 的数组。
9.1 文字规则
4. 标识符
(1)有效的字符:英文字母,数字,下划线或 $或它们的组合,最长可以包含1023个字符。
用行为描述结构给寄存器类型赋值。给reg类型赋值是 在过程块中。
寄存器类的类型
寄存器类有四种数据类型
寄存器类型
功能
reg
integer
real time realtime
可定义的无符号整数变量,可以是标量(1位)或矢 量,是最常用的寄存器类型 32位有符号整数变量,算术操作产生二进制补码
形式的结果。通常用作不会由硬件实现的的数据处理。
‘1’, High, True, Logic High, Power, VDD, VCC, Positive Assertion
’X’ Unknown: Occurs at Logical Which Cannot be Resolved Conflict
HiZ, High Impedance, Tri- Stated, Disabled Driver (Unknown)
// reg c, d;
reg c, d;
// reg o2
reg o2
reg o1;
and u1(o2, c, d);
and u1(o2, c, d);
always @(a or b)
always @(a or b)
if (a) o1 = b; else o1 = 0;
if (a) o1 = b; else o1 = 0;
选择正确的数据类型
输出端口可以由 net/register驱动,但 输入端口只能是net
相关文档
最新文档