北航计算机学院-计算机组成原理课程设计-2020秋
PreProject-Verilog HDL 与 ISE
Verilog或ISE高级特性与自动化测试
本系列所有博客,知识讲解、习题以及答案均由北航计算机学院计算机组成原理课程组创作,解析部分由笔者创作,如有侵权联系删除。
从本节开始,课程组给出的教程中增添了很多视频讲解。为了避免侵权,本系列博客将不会搬运课程组的视频讲解,而对于文字讲解也会相应地加以调整,重点在于根据笔者自己的理解给出习题的解析。因此带来的讲解不到位敬请见谅。
编译预处理
Verilog HDL语言和C语言一样也提供了编译预处理的功能。所谓编译预处理,可以类比C语言中的#define等语句。例如:
#define BUFSIZE 256
char buf[`BUFSIZE];
Verilog HDL语言和C语言一样也提供了编译预处理的功能。在Verilog HDL语言中,为了和一般的语句相区别,这些预处理命令以符号"`“开头(位于主键盘左上角,其对应的上键盘字符为”~"。注意这个符号不同于单引号)。这些预处理命令的有效作用范围为定义命令之后到本文结束或到其他命令定义替代该命令之处。由于计组实验中用到的预处理命令不多,所以在此仅对`define, `timescale做相应介绍。
1. 宏定义`define
用一个指定的标识符(即名字)来代表一个字符串,它的一般形式为:
`define 标识符(宏名) 字符串(宏内容)
如:
`define signal string
它的作用是指定用标识符signal来代替string这个字符串,在编译预处理时,把程序中该命令以后所有的signal都替换成string。
例如:
`define WORDSIZE 8
module test reg[1:`WORDSIZE] data;
//相当于定义reg[1:8] data;
endmodule
注意在引用宏名时也要必须在宏名前加上符号"`"表明该名字是经过宏定义的名字。
2. 文件包含`include
所谓"文件包含"处理是一个源文件可以将另外一个源文件的全部内容包含进来,即将另外的文件包含到本文件之中。Verilog HDL语言提供了`include命令用来实现"文件包含"的操作。其一般形式为:
`include "文件名"
在编译的时候,需要对include命令进行"文件包含"预处理:将File2.v的全部内容复制插入到include "File2.v"命令出现的地方,即将File2.v被包含到File1.v中。在接着往下进行编译中,将"包含"以后的File1.v作为一个源文件单位进行编译。
例如:
// aaa.v
module aaa(a,b,out);
input a, b;
output out;
wire out;
assign out = a ^ b;
endmodule
// bbb.v
`include "aaa.v"
module bbb(c,d,e,out);
input c,d,e;
output out;
wire out_a;
wire out;
aaa aaa(.a(c),.b(d),.out(out_a));
assign out=e&out_a;
endmodule
在经过编译预处理后,文件bbb.v被处理为:
// bbb.v
module aaa(a,b,out);
input a, b;
output out;
wire out;
assign out = a ^ b;
endmodule
module bbb(c,d,e,out);
input c,d,e;
output out;
wire out_a;
wire out;
aaa aaa(.a(c),.b(d),.out(out_a));
assign out=e&out_a;
endmodule
关于"文件包含"处理的四点说明:
-
一个`include命令只能指定一个被包含的文件,如果要包含n个文件,要用n个`include命令。注意下面的写法是非法的`include"aaa.v"“bbb.v”
-
`include命令可以出现在Verilog HDL源程序的任何地方,被包含文件名可以是相对路径名,也可以是绝对路径名。例如:`include"parts/count.v"
-
可以将多个`include命令写在一行,

本篇博客详细介绍了Verilog HDL中的编译预处理功能,如宏定义、文件包含、时间尺度设置,以及$display、$monitor、$readmemh等系统任务的用法。层次化事件队列的概念也被深入解析,强调了阻塞与非阻塞赋值在仿真中的区别。此外,还讨论了`default_nettype`和函数的使用,以及自动化测试工具IVerilog和Mars的应用技巧。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



