一、什么是例化
1)FPGA逻辑设计中通常是一个大的模块中包含了一个或多个功能子模块,verilog通过模块调用或称为模块实例化的方式来实现这些子模块与高层模块的连接,有利于简化每一个模块的代码,易于维护和修改。
2)如下图,当有了例化的方法之后,当模块中需要两个同样功能的USB模块时,我们只需要编写好一个usb模块的代码,之后通过例化,就可以将俩个usb模块添加到顶层模块之中。(注意,我们要有硬件思维,例化一个模块,那么就有一个硬件与之对应。例化多个,就有多个硬件。)
二、例化方法
1)首先我们设计好我们需要的功能模块,如下图左边的uart模块;
2)之后我们在大模块例化uart模块,如下图右边的例化格式,信号列表中“.”之后的信号是uart模块定义的信号,括号内的信号则是在大模块中申明的信号,这样就将大模块的信号与uart模块信号一一对应起来。
三、参数例化
1) 模块例化还有一个好处就是在调用的时候还可以传递/改变参数。如下图,我们设计了一个uart模块,他的数据位宽只有8位,但是如果我们需要一个16位宽的uart模块,这时候我们可以通过参数例化来减少重新编写模块的工作量。
2)我们定义数据位宽为DATA_W=8
3)在例化的时候我们可以如下图,在模块名后面加上“#(.DATA_W(16))”,就可以将数据位宽定义为16位。
注意,大家务必掌握参数传递的方法,点拨FPGA课程后面有一部分练习要计时到1秒时间,如果modelsim真的要仿真1秒,跑一个用例就要花费好几分钟或者几个小时,这样的低效率是难以忍受的。我们仿真时,在测试文件改变1秒的参数值,将它变得很小,这样就能加快仿真迅速。详细情况,请到明德扬查看,相应章节自然会清楚的。
|