Verilog HDL 基础
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
b.$stime:返回32位无负号整型时间值,在`timescale中指定单位,
c.$realtime:返回一个实数,在`timescale中指定单位;
6.模拟控制
a.$finish[(n)];使模拟器窗口关闭并控制返回主机操作系统;
b.$stop[(n)];将模拟进程挂起;
7.随机函数$random[(seed)];
2.monitor监控和显示指定任务的参数值,
3.strobe显示数据,保证数据只在所有赋值语句执行完毕时才被显示;(而$display()任务执行通常是确定的)。
4.文件输入输出
a.文件打开和关闭:系统函数$fopen()和$fclose(),
b.输出值到文件:$fdisplay,$fwrite,$fstrobe,$fmonitor,这些任务的第一个参数都是文件指针,其余参数为带有从参数表的格式定义序列。
(5)编译指令
1.`difine,`undef,产生/取消文本替换的宏;
2.`ifdef,`else,`endif,条件编译;
3.`default_nettype,为隐式线网指定线网类型,在模块外使用,影响其后的所有模块;线网类型的关键字有:
wire,tri,tri0,wand,triand,tri1,wor,trior,trireg;
(3)标识符与关键字命名
1.标识符首字不能为数字或$,可以为字母和下划线,
2.命名长度不能超过1024,
3.区分大小写(与VHDL不同);
4.系统任务和系统函数前必须在标识符前加上$。
5.转义标识符\开头,以空格、制表符(tab键)或换行符结尾,可显示打印ASCII字符。
(4)系统任务和系统函数
1.display(信息输出到标准输出设备,带行结束符)和write(输出信息不带行结束符)。用于显示输出的特殊字符:
4.`include,包含源文件,可以嵌套,如果文件1包含文件2,文件2包含文件3,则在文件1中用2条该指令包含且文件3出现在前;
5.`resetall,重设为缺省值;
6.`timescale,说明时间单位和精度,$printtimescale显示模块的时间单位和精度;
7.`unconnected_drive,`nounconnected_drive,出现在这两个指令之间的任何未连接的输入端口呈现为正偏电路状态(连接到高电平)或反偏电路状态(连接到低电平)。
\\n换行
\\t制表符
\\\\字符\\\
\\"字符"
\\ddd值为十六进制字符
%%字符%
格式定义:
%h或%H:十六进制
%d或%D:十进制
%o或%O:八进制
%b或%B:二进制
%c或%C: ASCII字符
%v或%V:线网信号长度
%m或%M:层次名
%s或%S:字符串
%t或%T:当前时间格式
缺省如$displayb:显示二进制数,
5.tri0和tri1线网:用于线逻辑的建模,若无驱动源驱动,则tri0的值为0(tri1的值为1);
6.supply0和supply1:前对地建模,电平为0;后者对电源建模,即高电平1;
(9)寄存器类型
1.reg:可以取任意长度,值通常被解释为无符号数;
2.integer:整型值,最多容纳32位;可以存储有符号数,且算术操作符提供2的补码运算结果;不能位访问,一种截取位的办法是将整数赋值给一般的reg型变量,然后从中选取相应的位,综从右向左截取(获得最低位),多余的(高位)被截断;
(2)IC设计流程:
系统结构设计与仿真——>HDL设计——>TestBench功能模拟测试、逻辑仿真——>综合成逻辑门(工艺库、约束文件)—— >初步时序分析(静态、电压、温度)——>自动布线布局——>后端报告(布局布线后增加的电阻、电容)——>动态(布局后)时序仿真,任何的建立例外都必须通过优化产生该例外的路径,以减小延迟;任何保持例外都必须通过在产生例外的路径上增加缓存,来增加延迟——>逻辑验证——>投片生产。
{},连接操作,可把多个信号的某些位连接起来进行位运算操作表示一个新信号,还可以嵌套;
=,<=,赋值,
复制操作符,{重复数字{重复内容}};
3.time:存储和处理时间,只存储无符号值,默认为64位值;
(10)门类型
1.and/or:一个标量输出多个标量输入,门共有:
andorxor
nandnorxnor
2.buf/not:一个标量输入和多个标量输出;
(11)操作符
优先级:由高到低,
!(逻辑非),
&,~&,|,~|,^,~^,规约操作符在单一操作数的所有位上进行操作,并产生1位结果;
+,-,正负;
*,/(只取整,余数丢弃),%(求余数,两侧均为整型);
+,-,加减;
<<,>>,移位操作,空位补0,
>,<,>=,<=,
==,!=,===(等于),!==(不等于);
&,~&,~,^(按位异或),^~(同或),位运算操作,右端对齐;
|,~|,
&&(逻辑与),
||,逻辑操作,
?:,条件操作,
8.`celldefine,`endcelldefine,这两个指令之间为单元模块。
(6)空白符和注释
空格、制表符、换行符、走纸符没有特殊意义;
注释形式多行/**/或单行用//,
(7)数值和字符串
1.4种基本值:0,1,x未知,z高阻;x和z不区分大小写;
2.3种基本常量:整型,实型,字符串型;八进制(o或O),二进制(b或B),十进制(d或D),十六进制(h或H);科学计数法,2_3.5e2值为2350.0忽略下划线;字符串在双引号内,不能分多行写;
(8)线网类型
1.wire和tri:连线和三态线网,可描述多个驱动源驱动同一线网类型,具体值由下表决定:
wire 0 1 x z
0 0 x x 0
1 x 1 x 1
x x x x x
z 0 1 x z
2.wor和trior:线或线网;
3.wand和triand:线与网;
4.trireg:三态寄存器,用于存储数值,并可用于电容节电建模;
$dist_exponential(seed,mean);
$dist_poisson(seed,mean);
$dist_chi_square(seed,degree_of_freedom);
$dist_t(seed,degree_of_freedom);
$dist_erlang(seed,k_stage,mean);
Verilog HDL
分类:电路与IC
一基本要素
(1)Verilog HDL与VHDL
1.它于1995年成为IEEE标准,即standard 1364-1995。VHDL于1987年成为IEEE标准。
2.类C语言,不允许自定义数据类型(VHDL可以)。
3.可描述开关级电路模型,但信号初值不确定,百度文库须由程序初始化;VHDL系统数据定义后没有赋值则默认为0,对系统级支持能力要强一些。
c.从文件中读出数据并载入存储器:$readmemb,$readmenh用于指定文件中读取并载入数据到指定的存储器。可在模拟时间的任何时刻执行,读取的文件只能包含如下内容:
空格、换行符、制表符(tab键)、换页;注释;二进制和十六进制;
5.模拟时间访问当前模拟时间,
a.$time:返回64位的整型模拟时间值,由`timescale激活;
产生随机数,每次调用时根据种子变量(seed)的取值返回一个新的32位有符号随机数。种子变量必须是寄存器型、整型或时间寄存器型,种子变量来控制函数返回值,改变量的值应该在调用$random系统函数之前就已定义好。其他产生随机数函数:
$dist_uniform(seed,start,end);
$dist_normal(seed,mean,standard_deviation,upper);
c.$realtime:返回一个实数,在`timescale中指定单位;
6.模拟控制
a.$finish[(n)];使模拟器窗口关闭并控制返回主机操作系统;
b.$stop[(n)];将模拟进程挂起;
7.随机函数$random[(seed)];
2.monitor监控和显示指定任务的参数值,
3.strobe显示数据,保证数据只在所有赋值语句执行完毕时才被显示;(而$display()任务执行通常是确定的)。
4.文件输入输出
a.文件打开和关闭:系统函数$fopen()和$fclose(),
b.输出值到文件:$fdisplay,$fwrite,$fstrobe,$fmonitor,这些任务的第一个参数都是文件指针,其余参数为带有从参数表的格式定义序列。
(5)编译指令
1.`difine,`undef,产生/取消文本替换的宏;
2.`ifdef,`else,`endif,条件编译;
3.`default_nettype,为隐式线网指定线网类型,在模块外使用,影响其后的所有模块;线网类型的关键字有:
wire,tri,tri0,wand,triand,tri1,wor,trior,trireg;
(3)标识符与关键字命名
1.标识符首字不能为数字或$,可以为字母和下划线,
2.命名长度不能超过1024,
3.区分大小写(与VHDL不同);
4.系统任务和系统函数前必须在标识符前加上$。
5.转义标识符\开头,以空格、制表符(tab键)或换行符结尾,可显示打印ASCII字符。
(4)系统任务和系统函数
1.display(信息输出到标准输出设备,带行结束符)和write(输出信息不带行结束符)。用于显示输出的特殊字符:
4.`include,包含源文件,可以嵌套,如果文件1包含文件2,文件2包含文件3,则在文件1中用2条该指令包含且文件3出现在前;
5.`resetall,重设为缺省值;
6.`timescale,说明时间单位和精度,$printtimescale显示模块的时间单位和精度;
7.`unconnected_drive,`nounconnected_drive,出现在这两个指令之间的任何未连接的输入端口呈现为正偏电路状态(连接到高电平)或反偏电路状态(连接到低电平)。
\\n换行
\\t制表符
\\\\字符\\\
\\"字符"
\\ddd值为十六进制字符
%%字符%
格式定义:
%h或%H:十六进制
%d或%D:十进制
%o或%O:八进制
%b或%B:二进制
%c或%C: ASCII字符
%v或%V:线网信号长度
%m或%M:层次名
%s或%S:字符串
%t或%T:当前时间格式
缺省如$displayb:显示二进制数,
5.tri0和tri1线网:用于线逻辑的建模,若无驱动源驱动,则tri0的值为0(tri1的值为1);
6.supply0和supply1:前对地建模,电平为0;后者对电源建模,即高电平1;
(9)寄存器类型
1.reg:可以取任意长度,值通常被解释为无符号数;
2.integer:整型值,最多容纳32位;可以存储有符号数,且算术操作符提供2的补码运算结果;不能位访问,一种截取位的办法是将整数赋值给一般的reg型变量,然后从中选取相应的位,综从右向左截取(获得最低位),多余的(高位)被截断;
(2)IC设计流程:
系统结构设计与仿真——>HDL设计——>TestBench功能模拟测试、逻辑仿真——>综合成逻辑门(工艺库、约束文件)—— >初步时序分析(静态、电压、温度)——>自动布线布局——>后端报告(布局布线后增加的电阻、电容)——>动态(布局后)时序仿真,任何的建立例外都必须通过优化产生该例外的路径,以减小延迟;任何保持例外都必须通过在产生例外的路径上增加缓存,来增加延迟——>逻辑验证——>投片生产。
{},连接操作,可把多个信号的某些位连接起来进行位运算操作表示一个新信号,还可以嵌套;
=,<=,赋值,
复制操作符,{重复数字{重复内容}};
3.time:存储和处理时间,只存储无符号值,默认为64位值;
(10)门类型
1.and/or:一个标量输出多个标量输入,门共有:
andorxor
nandnorxnor
2.buf/not:一个标量输入和多个标量输出;
(11)操作符
优先级:由高到低,
!(逻辑非),
&,~&,|,~|,^,~^,规约操作符在单一操作数的所有位上进行操作,并产生1位结果;
+,-,正负;
*,/(只取整,余数丢弃),%(求余数,两侧均为整型);
+,-,加减;
<<,>>,移位操作,空位补0,
>,<,>=,<=,
==,!=,===(等于),!==(不等于);
&,~&,~,^(按位异或),^~(同或),位运算操作,右端对齐;
|,~|,
&&(逻辑与),
||,逻辑操作,
?:,条件操作,
8.`celldefine,`endcelldefine,这两个指令之间为单元模块。
(6)空白符和注释
空格、制表符、换行符、走纸符没有特殊意义;
注释形式多行/**/或单行用//,
(7)数值和字符串
1.4种基本值:0,1,x未知,z高阻;x和z不区分大小写;
2.3种基本常量:整型,实型,字符串型;八进制(o或O),二进制(b或B),十进制(d或D),十六进制(h或H);科学计数法,2_3.5e2值为2350.0忽略下划线;字符串在双引号内,不能分多行写;
(8)线网类型
1.wire和tri:连线和三态线网,可描述多个驱动源驱动同一线网类型,具体值由下表决定:
wire 0 1 x z
0 0 x x 0
1 x 1 x 1
x x x x x
z 0 1 x z
2.wor和trior:线或线网;
3.wand和triand:线与网;
4.trireg:三态寄存器,用于存储数值,并可用于电容节电建模;
$dist_exponential(seed,mean);
$dist_poisson(seed,mean);
$dist_chi_square(seed,degree_of_freedom);
$dist_t(seed,degree_of_freedom);
$dist_erlang(seed,k_stage,mean);
Verilog HDL
分类:电路与IC
一基本要素
(1)Verilog HDL与VHDL
1.它于1995年成为IEEE标准,即standard 1364-1995。VHDL于1987年成为IEEE标准。
2.类C语言,不允许自定义数据类型(VHDL可以)。
3.可描述开关级电路模型,但信号初值不确定,百度文库须由程序初始化;VHDL系统数据定义后没有赋值则默认为0,对系统级支持能力要强一些。
c.从文件中读出数据并载入存储器:$readmemb,$readmenh用于指定文件中读取并载入数据到指定的存储器。可在模拟时间的任何时刻执行,读取的文件只能包含如下内容:
空格、换行符、制表符(tab键)、换页;注释;二进制和十六进制;
5.模拟时间访问当前模拟时间,
a.$time:返回64位的整型模拟时间值,由`timescale激活;
产生随机数,每次调用时根据种子变量(seed)的取值返回一个新的32位有符号随机数。种子变量必须是寄存器型、整型或时间寄存器型,种子变量来控制函数返回值,改变量的值应该在调用$random系统函数之前就已定义好。其他产生随机数函数:
$dist_uniform(seed,start,end);
$dist_normal(seed,mean,standard_deviation,upper);