FPGA-仿真文件的编写

分类: FPGA—verilog |
之前有一篇文章介绍过仿真测试文件编写的步骤:
1.给A模块写测试,其测试模块的模块名为A_tb,比如原模块模块名叫做led,测试模块名就叫
led_tb;
2.复制A模块的所有输入输出端口,也就是I/O声明部分(input和output信号),注意这里不包括中间变量(reg型和wire型信号);将所有的input
改为 reg, output 改为 wire;
3.再把A模块的端口定义部分复制过来,包括 模块名到分号结束,进行模块例化;
4.测试模块的意义就是模拟输入信号,来验证原模块的输出信号是否符合代码逻辑,所以在测试模块里面需要写一个initial块模拟所有的输入变量,进行赋值操作;
5.如果有时钟,需要再产生一个时钟信号;
6.最后添加时间标识。
设计背景:
测试文件在我们的项目中格外的重要,比如我们要验证你的模块的正确性难道要不停的下板来验证吗,如果你的项目小还可以,如果编译一下超过10分钟了你难道不停的等待,修改中循坏下去吗,所以如果我们可以设计出我们的测试文件,那么先验证我们的系统,如果我们的逻辑都正确了,我们就可以下班来查看,如果还不正确那么我们就可以用quartus
设计架构图:
sel_1架构
http://file.elecfans.com/web1/M00/51/C0/pIYBAFsOSuiACrHCAAAqU_-tDd8110.png
总架构
http://file.elecfans.com/web1/M00/51/AA/o4YBAFsOSpuALMZNAAA20AuuXGc031.png
设计代码:
我们写好的代码如下,大家看下,然后我们给大家讲解测试怎么写
模块
0
2
3
5
6
7
8
9
10
11
12
13
14
15
测试的简单写法,测试中模块的输入定义为寄存器reg型,输出定义为wire型,然后加上我们的块 initial ,再加上我们的例化,如下:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
118
在测试中我们也有许多的系统比如我们的系统任务$stop等,这些都属于语法知识了,大家可以买一本适合的书来看看,我们为我们的设计写好的激励如下:0
1
2
3
4
5
6
7
9
11
12
13
14
15
17
18
19
21
22
23
25
26
28
29
30
31
32
33
35
在测试中如果我们用到时钟了怎么办,我们可以这样写,如下
0
2
4
5
6
8
9
10
12
14
16
17
19
20
21
22
23
24
25
仿真图:
http://file.elecfans.com/web1/M00/51/AA/o4YBAFsOSkCACk0RAAApmO5PO30400.png
在仿真中我们可以真实的看到,当数据data_1为1,data_2位0的时候,当选择位select为0的时候,输出data_out的值为0也就是data_2的值,当select为1的时候,data_out的值位1,也就是data_1的值,后面的仿真也一样我们可以清楚的看到。