Verilog语言快速入门
- 格式:pptx
- 大小:659.84 KB
- 文档页数:59


先记下来:
1、不使用初始化语句;
2、不使用延时语句;
3、不使用循环次数不确定的语句,如:forever,while 等;
4、尽量采用同步方式设计电路;
5、尽量采用行为语句完成设计;
6、always 过程块描述组合逻辑,应在敏感信号表中列出所有的输入信号;
7、所有的内部寄存器都应该可以被复位;
8、用户自定义原件(UDP 元件)是不能被综合的。一:基本
Verilog 中的变量有线网类型和寄存器类型。线网型变量综合成 wire,而寄存器可能综合成 WIRE,锁存器和触发器,还有可能被优化掉。
二:verilog 语句结构到门级的映射
1、连续性赋值:assign
连续性赋值语句逻辑结构上就是将等式右边的驱动左边的结点。因此连续性赋值的目标结点总是综合成由组合逻辑驱动的结点。Assign 语句中的延时综合时都将忽视。
2、过程性赋值:
过程性赋值只出现在 always 语句中。
阻塞赋值和非阻塞赋值就该赋值本身是没有区别的,只是对后面的语句有不同的影响。
建议设计组合逻辑电路时用阻塞赋值,设计时序电路时用非阻塞赋值。
过程性赋值的赋值对象有可能综合成wire, latch,和flip-flop,取决于具体状况。如,时钟控制下的非阻塞赋值综合成 flip-flop。
过程性赋值语句中的任何延时在综合时都将忽略。建议同一个变量单一地使用阻塞或者非阻塞赋值。3、逻辑操作符:
逻辑操作符对应于硬件中已有的逻辑门,一些操作符不能被综合:===、!==。
4、算术操作符:
Verilog 中将 reg 视为无符号数,而 integer 视为有符号数。因此,进行有符号操 作时使用 integer,使用无符号操作时使用 reg。5、进位:
通常会将进行运算操作的结果比原操作数扩展一位,用来存放进位或者借位。如:
Wire [3:0] A,B;
Wire [4:0] C;
Assign C=A+B;
C 的最高位用来存放进位。
初学者学习Verilog HDL的步骤和经验技巧
Verilog HDL是一种硬件描述语言(HDL:Hardware DiscripTIon Language),Verilog HDL语言是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。
Verilog HDL和VHDL是目前世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由Gateway Design AutomaTIon公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准
Verilog HDL语言学习用途就是在最广泛的C语言的基础上发展起来的一种件描述语言,它是由GDA(Gateway Design AutomaTIon)公司的PhilMoorby在1983年末首创的,最初只设计了一个仿真与验证工具,之后又陆续开发了相关的故障模拟与时序分析工具。1985年Moorby推出它的第三个商用仿真器Verilog-XL,获得了巨大的成功,从而使得Verilog
HDL迅速得到推广应用。1989年CADENCE公司收购了GDA公司,使得VerilogHDL成为了该公司的独家专利。1990年CADENCE公司公开发表了Verilog HDL,并成立LVI组织以促进Verilog HDL成为IEEE标准,即IEEE Standard 1364-1995.Verilog HDL的最大特点就是易学易用,如果有C语言的编程经验,可以在一个较短的时间内很快的学习和掌握,因而可以把Verilog HDL内容安排在与ASIC设计等相关课程内部进行讲授,由于HDL语言本身是专门面向硬件与系统设计的,这样的安排可以使学习者同时获得设计实际电路的经验。与之相比,VHDL的学习要困难一些。但Verilog HDL较**的语法,也容易造成初学者犯一些错误,这一点要注意。
Verilog基础入门知识点
一、逻辑值
逻辑 0:表示低电平,也就对应我们电路 GND;
逻辑 1:表示高电平,也就是对应我们电路的 VCC;
逻辑 X:表示未知,有可能是高电平,也有可能是低电平;
逻辑 Z:表示高阻态,外部没有激励信号,是一个悬空状态。
二、数字进制与表示格式
Verilog数字进制格式包括二进制、八进制、十进制和十六进制。
一般常用的为二进制、十进制和十六进制。
二进制表示如下:4’b0101 表示4位二进制数字0101
十进制表示如下:4’d2 表示4位十进制数字2(二进制0010)
十六进制表示如下:4’ha 表示4位十六进制数字a(二进制1010)
16’b1001_1010_1010_1001 = 16’h9AA9 三、标识符
标识符( identifier)用于定义模块名、端口名、信号名等。
标识符可以是任意一组字母、数字、$符号和_(下划线)符号的组合;
但标识符的第一个字符必须是字母或者下划线;
标识符是区分大小写的;
不建议大小写混合使用;
普通内部信号建议全部小写;
信号命名最好体现信号的含义,简洁、清晰、易懂;
以下是一些推荐的写法:
1、用有意义的有效的名字如 sum 、cpu_addr等。
2、用下划线区分词,如cpu_addr。
3、采用一些前缀或后缀,比如时钟采用clk前缀:clk_50,clk_cpu;
三、数据类型
在 Verilog 语言中,主要有三大类数据类型:
寄存器数据类型、线网数据类型和参数数据类型。
从名称中,我们可以看出,真正在数字电路中起作用的数据类型应该是 寄存器数据类型和线网数据类型。
寄存器类型:
寄存器表示一个抽象的数据存储单元,通过赋值语句可以改变寄存器储存的值
寄存器数据类型的关键字是 reg,reg 类型数据的默认初始值为不定值x reg类型的数据只能在 always 语句和 initial 语句中被赋值。
Verilog的词法约定
1Verilog是大小写相关的,其中的关键字全部为小写。
2空白符由空格、制表符、和换行符组成。
3单行注释以“‘define WORD_SIZE 32
‘include 在编译期间将一个verilog源文件包含在另一个verilog文件中,类似于c中的#i nclude结构。
‘include
Verilog的数据类型1
1值的种类
四值电平逻辑
值的级别 硬件电路中的条件
0 逻辑0,条件为假
1 逻辑1,条件为真
X 逻辑值不确定
Z 高阻,浮动状态
除了逻辑值外,Verilog还是用强度值来解决数字电路中不同强度的驱动源之间的赋值冲突。
强度等级 类型 程度
Supply 驱动 最强
Strong 驱动
Pull 驱动
Large 存储
Weak 驱动
Medium 存储
Small 存储
Highz 高阻 最弱 如果两个具有不同强度的信号驱动同一个线网,则竞争结果值为高强度信号的值。
如果两个强度相同的信号之间发生竞争,则结果为不确定值。
2线网
线网(net)表示硬件单元之间的连接。线网一般使用关键字wire进行声明。如果没有显式的说明为向量,则默认线网的位宽为1。线网的默认值为Z,(trireg类型线网例外,其默认值为X)。其值由驱动源确定,如果没有驱动源则线网的值为Z
Net并不是一个关键字,它代表了一组数据类型,包括wire,wand,wor,tri,triand,trior以及trireg等。
3寄存器
寄存器用来表示存储元件,它保持原有的数值,直到被改写。注意:不要将这里的寄存器和实际电路中由边沿触发器构成的硬件寄存器混淆。在Verilog中,术语register仅意味着一个保持数值的变量。与线网不同,寄存器不需要驱动源,而且也不像硬件寄存器那样需要时钟信号。在仿真过程中的任意时刻,寄存器的值都可以通过赋值来改变。