FPGA学习笔记(四)通过数码管学习顶层模块和例化的编写

目录

  • 模块例化
  • 例子

模块例化

在一个模块中引用另一个模块,对其端口进行相关连接,叫做模块例化。

作用:
将模块端口与外部信号按照其名字进行连接,端口顺序随意。
如果某些输出端口并不需要在外部连接,例化时 可以悬空不连接,甚至删除。
input 端口在例化时不能删除,否则编译报错,output 端口在例化时可以删除。

我的理解:
我认为顶层文件的编写,相当在编写嵌入式裸机开发中的main.c文件,需要将各个子文件综合在一起,其中需要将一些变量关联在一起,C语言中采用的extern的声明方式,将变量在不同的文件中调用,FPGA就使用顶层文件的例化将他们关联在一起。

例子

在正点原子FPGA的开发指南中,在数码管一章中,有一个顶层文件的编写,因为把计时模块和数码管显示的模块分开了,为了实现隔一段时间,数码管显示不同的数字。
计时文件的模块:
FPGA学习笔记(四)通过数码管学习顶层模块和例化的编写_第1张图片
数码管显示的模块:
FPGA学习笔记(四)通过数码管学习顶层模块和例化的编写_第2张图片
顶层文件的编写:
FPGA学习笔记(四)通过数码管学习顶层模块和例化的编写_第3张图片FPGA学习笔记(四)通过数码管学习顶层模块和例化的编写_第4张图片
首先要把外部信号进行模块化,之后要进行引脚的连接。其次就像add_flag这种,因为两个模块公用,所以需要关联在一起。
在time_count文件中:
参考: verilog中参数传递与参数定义中#的作用,说明了参数传递的格式。
这里#的意思是参数传递,将TIME_SHOW传递给MAX_NUM,但是没看懂什么意思,感觉没什么用,删掉下载到板子里试一试。

参数传递的意义:参数型常量经常用于定义延迟时间和变量宽度。在模块和实例引用时,可以通过参数传递改变在被引用模块或实例中已经定义的参数。

但是我没有改变这个值
FPGA学习笔记(四)通过数码管学习顶层模块和例化的编写_第5张图片
只能是这里MAX_NUM定义的时候不能写空,上层文件可以随便修改,程序方便。

你可能感兴趣的:(FPGA学习,fpga开发,学习)