Verilog 中 defparam localparam parameter 的语法说明,以及ALTDDIO IP应用

NO.1: Verilog 中 defparam localparam 的语法说明

今天看程序时忽然出现这样一些东西:defparam / localparam

  • parameter 是一个模块中,常量的声明,可进行参数传递和重定义
  • defparam 是对已经声明的模块常量,在例化的时候对这个常量的数值进行修改
  • localparam 是模块内有效的定义,是局部变量,不可用于参数传递,也不能被重定义

定义方式如下:

defparam ParameterName = Constant Expression
localparam ParameterName = Constant Expression


参考程序如下:

	altddio_in	ALTDDIO_IN_component (
				.datain (datain),
				.inclock (inclock),
				.dataout_h (sub_wire0),
				.dataout_l (sub_wire1),
				.aclr (1'b0),
				.aset (1'b0),
				.inclocken (1'b1),
				.sclr (1'b0),
				.sset (1'b0));
	defparam
		ALTDDIO_IN_component.intended_device_family = "Cyclone V",
		ALTDDIO_IN_component.invert_input_clocks = "OFF",
		ALTDDIO_IN_component.lpm_hint = "UNUSED",
		ALTDDIO_IN_component.lpm_type = "altddio_in",
		ALTDDIO_IN_component.power_up_high = "OFF",
		ALTDDIO_IN_component.width = 14;
该程序是ALTDDIO_IN IP内核例化程序

程序中 defparam 的使用是对ALTDDIO IP中参数的赋值(修改),和 parameter 不同的是: defparam 是对已存在的变量进行赋值(修改),主要用于不同模块中使用相同的变量(名),但使用的值不同,或者不同功能中相同变量(名)但又不使用相同值,这样就需要对变量进行修改后使用,这时 defparam 就起作用了。

parameter 主要用来定义常量标识符,类似C语言的宏定义;增加程序的的可读性和可维护性;参数型常量经常用于定义延迟时间和变量宽度。在模块和实例引用时,可以通过参数传递改变在被引用模块或实例中已经定义的参数。


module example
    #(parameter WIDTH=8) 
    //
    (
        input [WIDTH-1:0] dataa,//[WIDTH-1:0]
        input [WIDTH-1:0] datab,
        output reg [WIDTH:0] result
    );
 parameter COUNT = 4'hf;//用于代码部分的参数

.....
.....
.....

endmodule

NO.2: ALTDDIO IP应用

ALTDDIO_IN IP内核实现了一个DDR寄存器接口,在参考时钟的上升和下降沿接收数据并以高低双路输出。全称:双倍数据速率IO,简称“D_D_io”
 表1:ALTDDIO 参数设置(**对应了NO.1中 defparam 的使用**)
参数 说明
Currently selected device family 指定所使用的Altera®®器件系列。
Width: (bits) 指定数据总线的宽度。
Asynchronous clear and asynchronous set ports 选择异步清零(aclr)的 Use ‘aclr’ port。选择异步预置(aset)的Use ‘aset’ port。如果没有使用任何异步清零选项,就选择 Not used并指定寄存器应该高电平或低电平,可通过使能或禁用 Registers power up high来实现。
Synchronous clear and synchronous set ports 选择同步清零(sclr)的 Use ‘sclr’ port。选择同步预置(sset)的Use ‘sset’ port。如果没有使用任何同步清零选项,就选择Not used。同步复位选项仅适用于Arria GX、Stratix III、Stratix II、Stratix II GX、Stratix、Stratix GX、HardCopy II和HardCopy Stratix器件。
Use ‘inclocken’ port 打开这一选项,添加一个clock enable端口,对数据输入开始计时时进行控制。该信号防止数据被传递。
Invert input clock 使能时,数据的第一个比特在输入时钟的上升沿被采集。如果没有使能,那么数据的第一个比特在输入时钟的下降沿被采集。
DDRin I/O 配置

这里写图片描述

注: 在时钟的下降沿,负边沿触发寄存器BI获取第一个数据比特。在相应的时钟的上升沿,正边沿触发寄存器AI获取第二个数据比特。对于成功传输到逻辑阵列的数据,锁存CI将寄存器BI的数据同步到时钟的正边沿。

DDRin I/O 时序

这里写图片描述

注:该图显示了输入路径的功能时序波形。信号名是ALTDDIO_IN IP内核使用的端口名。datain信号是管脚到DDR电路的输入。寄存器BI的输出是neg_reg_out。锁存器CI的输出是dataout_1,而寄存器AI的输出是dataout_h。dataout_h和dataout_l驱动逻辑阵列并显示DDR实现与正边沿触发数据之间的数据转换。

ALTDDIO_IN IP内核信号

这里写图片描述

  表2:ALTDDIO_IN IP内核的输入和输出端口:

这里写图片描述

你可能感兴趣的:(FPGA开发,FPGA实验,实验项目)