FPGA的顶层文件调用方式(veliog HDL && Quart II)

FPGA的顶层文件调用方式(veliog HDL && Quart II)

1.新建.v文件,选择hdl

点击project,选中set as top level,然后开始调用各个文件夹。其中,对模块的调用要用原先的模块名再重定义 u_xxx,输入输出要对应上。如图所示:

FPGA的顶层文件调用方式(veliog HDL && Quart II)
​ 可以看到,新建.v文件后,和普通文件的写法一样,只不过在顶层文件中,input和output是外部输入的信号:clk来自时钟,key是按键,而sel则是整个代码写完后,控制数码管显示的信号输出。显然,如果把我们写的代码抽象成黑箱,那么顶层文件就是对黑箱输入某些信号,然后得到某些信号。

​ 在对黑箱输入和输出配置完之后,我们要进到黑箱当中,对每个module进行连线,相当于是黑箱的黑箱,所以,我们需要定义wire变量,用于module之间的数据传递,如图所示:

FPGA的顶层文件调用方式(veliog HDL && Quart II)

​ 在顶层文件定义wire变量,就是用来对每个module之间的input和output进行连线,如uart_en_w变量,就是用来在记数module中,将uart_en_w置1,并设置为output输出,而在串口发送模块中,uart_en_w作为外来的信号被设置为input。如图所示:

FPGA的顶层文件调用方式(veliog HDL && Quart II)

FPGA的顶层文件调用方式(veliog HDL && Quart II)

​ 明白了在顶层文件中定义的wire变量的作用后,我们需要学会如何在顶层文件将各个模块串联起来。

FPGA的顶层文件调用方式(veliog HDL && Quart II)

FPGA的顶层文件调用方式(veliog HDL && Quart II)

​ 先解释一下各个部分的作用。

​ 1.‘key_count u_key_count’,是将你原先写的单个模块名‘key_count ’重新定义为‘'u_key_count’。

​ 2.模块中的(.xxxx (xx) ),举个例子,.sys_clk(sys_clk),点+变量名是语法规定,同时sys_clk是之前写的单个模块里的sys_clk名称(分不清请注意深色的两个变量),括号里的变量则是顶层文件中定义的wire变量。

​ 3.注意,里面顺序请尽量按照你模块中写的顺序编写。

​ 按照上述步骤之后,就可以完成基础的连线了。连线完成后的RTL图如下:

FPGA的顶层文件调用方式(veliog HDL && Quart II)

温故而知新。