可綜合的SystemVerilog:參數化函數/任務


在Verilog中,參數化模塊被廣泛應用。參數可重新定義保證模塊的可配置性及可復用性。但是,函數及任務並無法像模塊一樣被參數化,減弱了Verilog的描述化能力。

SystemVerilog提供了一種方式解決上述限制,在參數化的類(class)中使用靜態(static)函數/任務。調用函數/任務時,重新定義類的參數,例程如下:

virtual class Functions #(parameter SIZE=32);
	static function [SIZE-1:0] adder (input [SIZE-1:0] a, b);
		return a+b;
	endfunction
endclass

module top (input  logic [63:0] a, b,
			output logic [63:0] y);
	always_comb
		y = Functions #(64)::adder(a, b);
endmodule

參數化使我們只需要維護一個版本的函數/任務,而不是像原先因不同的數據類型,數據大小產生多個代碼版本。該功能有兩個使用限制:

  • 類必須被聲明為虛擬(virtual)
  • 類必須定義在$unit命名空間中

上述代碼在Vivado 2014.3中可綜合通過,但是Synplify-Pro 2013.03不支持virtual class關鍵字聲明。


下篇預告:可綜合的SystemVerilog:命名空間


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM