Verilog的逻辑系统及数据类型(二):参数和参数重载

微信公众号获取更多FPGA相关源码:
在这里插入图片描述

3.参数(parameters)

  1. 用参数声明一个可变常量,常用于定义延时及宽度变量。
  2. 参数定义的语法:parameter <list_of_assignment>;
  3. 可一次定义多个参数,用逗号隔开。
  4. 在使用文字(literal)的地方都可以使用参数。
  5. 参数的定义是局部的,只在当前模块中有效。
  6. 参数定义可使用以前定义的整数和实数参数。

实例:

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相关源码:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值