可综合的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:命名空间

转载于:https://www.cnblogs.com/wind330/p/5041775.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值