最近在学FPGA的时候,总搞不清楚例化两个字是什么意思?什么是模块例化?各个模块例化之后怎么连接的弄得我晕头转向,今天用一个流水灯的程序探究了一下。
首先我们看最底层的三个模块程序:
module smg_scan_module //数码管选通模块
(
input sys_clk, //输入时钟和复位信号
input rst_n,
output [5:0]Scan_Sig //输出数码管选通信号 为6位数据信号
);
module smg_encode_module //数码管编码模块
(
input sys_clk,
input rst_n,
input [3:0]Number_Data, //输入Number_Data 是一个0-9的数值 为4位数据信号
output [7:0]SMG_Data //输出SMG_Data即8位数码管的操作信号 为8位数据信号
);
module smg_control_module //数码管控制模块
(
input sys_clk,
input rst_n,
input [23:0]Number_Sig, //输入 Number_Sig 为24位数据信号
output [3:0]Number_Data //输出 Number_Data 为4位数据信号
);
这是最底层的,再看上面一层对这三个模块的例化程序
module smg_interface
(
input sys_clk,
input rst_n,
input [23:0] Number_Sig,
output [7:0] SMG_Data,
output [5:0] Scan_Sig
);
smg_control_module U1
(
.sys_clk (sys_clk ),
.rst_n ( rst_n ),
.Number_Sig ( Number_Sig ), // input - from top
.Number_Data ( Number_Data ) // output - to U2
);
smg_encode_module U2
(
.sys_clk (sys_clk ),
.rst_n (rst_n ),
.Number_Data ( Number_Data ), // input - from U2
.SMG_Data ( SMG_Data ) // output - to top
);
smg_scan_module U3
(
.sys_clk (sys_clk ),
.rst_n ( rst_n ),
.Scan_Sig ( Scan_Sig ) // output - to top
);
如上面程序所示,例化数码管扫描程序为U3,例化数码管编码模块为U2,例化数码管控制模块为U1,
.sys_clk (sys_clk)这句话的意思就是,将这个模块的输入 sys_clk 命名为 sys_clk,
总的意思就是通过对各个小模块的输入输出的例化命名,使这三个模块相连,构成这一层的模块。