微信公众号获取更多FPGA相关源码:
3.参数(parameters)
- 用参数声明一个可变常量,常用于定义延时及宽度变量。
- 参数定义的语法:parameter <list_of_assignment>;
- 可一次定义多个参数,用逗号隔开。
- 在使用文字(literal)的地方都可以使用参数。
- 参数的定义是局部的,只在当前模块中有效。
- 参数定义可使用以前定义的整数和实数参数。
实例:
module mod1( out, in1, in2);
. . .
parameter cycle = 20, prop_ del = 3,
setup = cycle/2 - prop_del,
p1 = 8,
x_ word = 16’bx,
. . .
wire [p1: 0] w1; // A wire declaration using parameter
. . .
endmodule
3.1 参数重载(overriding)
3.2 参数重载举例
以文章中设计的计数器为例:FPGA搭积木之计数器
`timescale 1ns / 1ps
module counter #(parameter CNT_NUM = 4'd8,
parameter ADD = 1'b1)
(
input clk ,
input rst_n ,
input En_cnt ,
output reg [$clog2(CNT_NUM) - 1:0] cnt ,
output cnt_last
);
wire end_cnt;
always @(posedge clk or negedge rst_n)begin
if(!rst_n)begin
cnt <= ADD ? 'd0 : CNT_NUM - 1;
end
else if(En_cnt)begin
if(end_cnt)begin
cnt <= ADD ? 'd0 : CNT_NUM - 1;
end
else begin
cnt <= ADD ? cnt + 1'b1 : cnt - 1'b1;
end
end
end
assign end_cnt = ADD ? cnt == CNT_NUM - 1 : cnt == 0;
assign cnt_last = end_cnt ? 1'b1:1'b0;
endmodule
例化调用时,进行参数重载:
counter #(.CNT_NUM('d161),
.ADD(1'b1))
u_counter(
.clk (clk ),
.rst_n (rst_n ),
.En_cnt (En_cnt ),
.cnt (cnt ),
.cnt_last (cnt_last )
);
微信公众号获取更多FPGA相关源码: