新闻中心

EEPW首页>嵌入式系统>牛人业话> 零基础学FPGA(十五)Testbenth 很重要,前仿真全过程笔记(上篇)

零基础学FPGA(十五)Testbenth 很重要,前仿真全过程笔记(上篇)

—— 零基础学FPGA(十七)Testbenth 很重要,前仿真全过程笔记(上篇)
作者: 时间:2015-02-27 来源:网络 收藏

  1. 首先,我们需要将我们刚写好的那几个模块包含进去,即CPU模块,ROM模块,RAM模块,地址译码器模块,并写好时间测量度,见下图

本文引用地址://m.amcfsurvey.com/article/270154.htm

360桌面截图20141126133956.jpg

  2.定义顶层模块

  由于我们的设计只有两个输入,即时钟模块和复位模块,凡是输入信号在testbench中通一定义成reg型变量,凡是输出或者双向输入输出信号通一定义成wire型变量,我们的设计只有输入没有输出,故只定义输入和连线即可

360桌面截图20141126134439.jpg

  下图便是我们要组成的测试顶层模块图,我们定义的wire型变量,实际就是我们顶层模块中,模块模块与模块间的连线。而这些连线就是我们cpu的输出,这样我们就可以用我们的测试模块来测试我们的cpu是否能正确工作

360桌面截图20141126134607.jpg

  3. 元件例化

  就是将各个模块连接起来即可,这里就不做太多的说明了,因为以前都写过很多次了

360桌面截图20141126135242.jpg

  4.测试激励的书写

  小墨同学习惯上上来先写好时钟产生模块和复位模块.并将复位模块用task任务封装,这样我们在测试过程中就可以随时调用复位任务进行复位

  时钟为50Mhz,复位时间为20ns

360桌面截图20141126135613.jpg

  然后,我们再用task封装我们需要的模块,我们来想一下,上电后,CPU会从ROM中读两个时钟周期的数据是吧,但是我们的ROM现在还是空的,所以我们需要一个任务是往ROM中装入程序,给ROM中装数据我们可以用系统函数$readmemb,即打开一个文件,并将其中的数据送到我们之前定义的ROM中去

360桌面截图20141126140142.jpg

  而test1.pro文件时需要我们自己定义的,我们可以在quartusII中再新建一个.v文件,在里面写上我们自己定义的程序,并将其保存为.pro文件即可,至于写什么程序,是我们随便定义的,大家可以参考我之前在上一篇文章中上传的程序中,有一个test1.pro文件,打开之后可以看到是一些16位的数字码,这些码就是我们ROM的地址,从第一行开始,每8位数据位一个地址,注意我们每个地址的高三位是用下划线隔开的,这表明前三位是指令码,这三位会被状态机进行译码,控制CPU执行相应的操作

360桌面截图20141126140637.jpg

  装完ROM和RAM的数据之后,按说就可以了进行波形仿真了,因为cpu是自动读取数据的,下面我们先来做第一步仿真,我先把之后的代码注释掉,大家先看没有被注释掉的代码

360桌面截图20141126141526.jpg

  里面都是我们之前封装好的函数,刚开始进行复位,然后进行第一步测试,之后停止

fpga相关文章:fpga是什么




关键词:FPGATestbenth

评论


相关推荐

技术专区

关闭