虚拟机:VMware-workstation-full-14.0.0.24051
环 境:ubuntu 18.04.1
应用工具:VCS(verilog compiled simulator,编译型代码仿真器)
一、学习内容
二、编译预处理语句
§ “编译预处理”是Verilog HDL编译系统的一个组成部分,编译预处理语句以西文符号“‵ ”开头而不是单引号“’”!
§ 在编译时,编译系统先对编译预处理语句进行预处理,然后将处理结果和源程序一起进行编译。
(1)`define语句
宏定义语句——用一个指定的标志符(即宏名)来代表一个字符串(即宏内容)。【例】‵ define IN ina+inb+inc+ind。宏展开——在编译预处理时将宏名替换为字符串的过程。
宏定义的作用:以一个简单的名字代替一个长的字符串或复杂表达式;以一个有含义的名字代替没有含义的数字和符号 。
//宏定义不是Verilog HDL语句,不必在行末加分号! 如果加了分号,会连分号一起置换。
module test;
reg a,b,c,d,e,out;
`define expression a + b + c + d;
//上面如果加了分号,经过宏展开后,assign语句为:assign out = a + b + c + d; + e; 就出现了语法错误
assign out = `expression + e;
...
- 宏名可以用大写字母,也可用小写字母表示;但建议用大写字母,以与变量名相区别;
- ‵define语句可以写在模块定义的外面或里面,宏名的有效范围为定义命令之后到源文件结束;
- 在引用已定义的宏名时,必须在其前面加上符号“ ‵ ” ;
//在进行宏定义时,可引用已定义的宏名,实现层层置换。
module test;
reg a,b,c;
wire out;
`define aa a + b
`define cc c +‵ aa //引用宏名‵ aa 来定义宏cc
assign out = ‵ cc;
...
//经过宏展开后, assign语句为:assign out = c + a + b;
- 预处理时只是将程序中的宏名替换为字符串,不管含义是否正确。只有在编译宏展开后的源程序时才报错;
- 使用宏名代替一个字符串,可简化书写,宏名和宏内容必须在同一行中进行声明;
(2)`include语句
文件包含语句——一个源文件可将另一个源文件的全部内容包含进来。
- 如:将file2.v中全部内容复制插入到‵include “file2.v”命令出现的地方
`include语句可以避免做重复劳动!不必将源代码复制到自己的另一源文件中,使源文件显得简洁。还可以将一些常用的宏定义命令或任务(task)组成一个文件,然后用‵include语句将该文件包含到自己的另一源文件中,相当于将工业上的标准元件拿来使用;当某几个源文件经常需要被其他源文件调用时,则在其他源文件中用‵include语句将所需源文件包含进来。
【例 1】 用‵ include语句设计16位加法器
//一个‵ include语句只能指定一个被包含的文件;若要包含n个文件,需用n个‵ include语句。
`include “aaa.v” “bbb.v” //非法!
`include “aaa.v”
`include “bbb.v” //合法
//‵include语句可出现在源程序的任何地方。被包含的文件若与包含文件不在同一子目录下,必须指明其路径!
`include “parts/count.v” //合法!
- 文件包含允许嵌套
(3)timescale语句
时间尺度
语句——用于定义跟在该命令后模块的时间单位和时间精度。时间单位
——用于定义模块中仿真时间和延迟时间的基准单位;时间精度
——用来声明该模块的仿真时间和延迟时间的精确程度。在同一程序设计里,可以包含采用不同时间单位的模块,此时用最小的时间精度值决定仿真的时间单位。
//时间精度至少要和时间单位一样精确,时间精度值不能大于时间单位值!
`timescale 1ps / 1ns // 非法!
`timescale 1ns / 1ps // 合法!
//在`timescale语句中,用来说明时间单位和时间精度参量值的数字必须是整数。
//其有效数字为1、10、100;
//单位为秒(s)、毫秒(ms)、微秒(us)、纳秒(ns)、皮秒(ps)、毫皮秒(fs)
【例】‵ timescale语句应用举例。
//timescale 10ns / 1ns //时间单位为10ns,时间精度为1ns
...
reg sel;
initiaL begin
#10 sel = 0; // 在10ns10时刻,sel变量被赋值为0
#10 sel = 1; // 在10ns20时刻,sel变量被赋值为1
end
...
三、思考和小结
(1)思考
- timescale编译预处理的作用是什么?
(2)小结
作者:xlinxdu
版权:本文版权归作者所有
转载:未经作者允许,禁止转载,转载必须保留此段声明,必须在文章中给出原文连接。