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內核的輸入和輸出端口:

這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章