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