SystemVerilog中的参数化类

类似于声明一个参数化的module,我们也可以声明一个参数化的class。这个参数可以用来实例化不同数值和类型的对象。
参数化的类可以减少代码量,提高代码的可维护性。
parameters类似于一个类里面的局部变量,不同的参数可以具有不同的默认值,并且可以在实例化时被覆盖掉。
对象的参数在构造时已经确定了,也就是说不支持在仿真时动态地修改。
参数化类的声明格式如下:
class mclass #(int data = 32);  
参数化类例化方式如下:
mclass #(64) mclassinst; mclass #(.data(64)) mclassinst;  
参数化类例化时可以是值传递,也可以是位置传递。一般parameter都是使用大写字母表示。
数值参数化
module top; class packet #(parameter int a_width = 32, d_width = 32); //parameter keyword is optional bit [a_width-1:0] address; bit [d_width-1:0] data ; function new( ); address = 'hff; data = 'h11; endfunction endclass initial begin packet #(.a_width(64), .d_width(16)) p1; packet #(16,8) p2; packet p3; //default values of parameters $display (p1.address = %0d bits, $bits(p1.address)); $display (p1.data = %0d bits, $bits(p1.data)); $display (p2.address = %0d bits, $bits(p2.address)); $display (p2.data = %0d bits, $bits(p2.data)); $display (p3.address = %0d bits, $bits(p3.address)); $display (p3.data = %0d bits, $bits(p3.data)); end endmodule  
仿真log:
p1.address = 64 bitsp1.data = 16 bitsp2.address = 16 bitsp2.data = 8 bitsp3.address = 32 bitsp3.data = 32 bits v c s s i m u l a t i o n r e p o r t  
在上面的例子中,我们定义了参数化类“packet”,其中含有参数a_width和d_width,默认值都是32。
后面我们在实例化时可以覆盖这两个参数的默认值,也可以不覆盖(使用默认值)。
类型参数化
除了数值参数化,还可以声明类型参数化的类,示例如下:
module top;//parameterize data typeclass packet #(parameter type i = int);i data; //data of type i (default 'int')endclassinitial begin//instantiate 'packet' with diferent data type overrides.packet #(bit[3:0]) p1; //override with data type 'bit[3:0]'packet p2; //default data type 'int'packet #(real) p3; //override with data type 'real'$display (p1.data type = , $typename(p1.data));$display (p2.data type = , $typename(p2.data));$display (p3.data type = , $typename(p3.data));endendmodule  
仿真log:
p1.data type = bit[3:0]p2.data type = intp3.data type = real v c s s i m u l a t i o n r e p o r t  
在类“packet”中,我们声明了parameter “type i = int” ,这是一个类型parameter,具体作用和数值parameter有所区别。
类型名称是“i” ,默认类型是“int” ,类型可以在类的实例化时被覆盖。


基于低功耗SRAM实现电池支持型系统的应用设计
需要了解Linux Device Tree的代码分析
国产变压器有载开关将全面真空化
利用MOSFET的线性区和饱和区与负载电阻配对来提供脉冲电流
国芯思辰|32位MCU AIP32F102X用于电动牙刷最高主频48MHz
SystemVerilog中的参数化类
智能型电动机保护器在某水泥厂的应用
多核处理器应用火热,高整合度电源芯片势在必行
苹果13正式发售时间
人脸识别应用为何广受校方青睐
基于相关分析法的声发射信号降噪技术
MR混合现实情景实训教学系统在旅游专业课堂中的应用
芯盾时代正式宣布零信任安全产品满足鲲鹏/飞腾平台的兼容认证要求
博通公司推出集成4×4 Wi-Fi的超紧凑型机顶盒平台
“顺丰敦豪”品牌正式上线,意味着顺丰正式入局供应链领域
iPhone7,小米5s/plus这几款手机怎么还不降价,销量第二春要来了!
千元内降噪耳机推荐!2020最强降噪耳机推荐
中央空调系统如何进行节能改造 浅谈中央空调系统改造
因光纤技术的普及和成本下降 光纤连接器开始在商业和工业据点出现
基于i.MX27的网络音视频通信的实现