目录
- 3.参数(parameters)
- 3.1 参数重载(overriding)
- 3.2 参数重载举例
微信公众号获取更多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 / 1psmodule 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)beginif(!rst_n)begincnt <= ADD ? 'd0 : CNT_NUM - 1;endelse if(En_cnt)beginif(end_cnt)begincnt <= ADD ? 'd0 : CNT_NUM - 1;endelse begincnt <= ADD ? cnt + 1'b1 : cnt - 1'b1;endend
endassign 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相关源码: