前段时间在FPGA上用Verilog写了一个多端口以太网的数据分发模块,因为每个网口需要独立的MAC地址和IP地址,为了便于后期修改,在设计中使用parameter来定义这些地址和数据总线的位宽等常量。
当时的做法是,顶层模块和子模块中都定义parameter型常数,在顶层模块引用子模块时,通过参数传递改变在被引用子模块中已定义的参数,实现在顶层模块统一管理参数的功能,代码如下
1 module top(); // 顶层模块 2 parameter eth1_ip_addr = { 8'd192, 8'd168, 8'd100, 8'd1}; // 以太网1 IP地址 192.168.100.1 3 parameter eth2_ip_addr = { 8'd192, 8'd168, 8'd100, 8'd2}; // 以太网2 IP地址 192.168.100.2 4 5 // 子模块1例化 6 sub1 7 #( .ip_addr(eth1_ip_addr) //<