• 如何在SV中package中使用函数parameter并在子模块调用


    前言
    实际开发过程中,可能会使用到一些函数,如果在不同子模块中重复定义,则会导致代码冗余。
    而使用SV语法则可以把函数定义在包中,包是单独的一个文件,子模块只需要include这个文件即可使用函数。

    而包中可以包含哪些定义?
    流程
    以下操作需要两个文件:definition.sv 和 demo_sv.sv文件
    (1)definition文件内容:包含位宽计算函数clogb2
    `ifndef DFFS_DONE
        `define DFFS_DONE
        package p_demo;
            function integer clogb2 (input integer depth);
            begin
                for (clogb2=0; depth>0; clogb2=clogb2+1
                    depth = depth >>1;                          
            end

    endfunction
        endpackage 
        import p_demo::*;
    `endif
    (2)demo_sv文件内容:通过include文件,然后可直接调用clogb2。
    `include "definitions.sv"
    module demo_sv (
        input  logic i_clk,
        output logic l_b        
    );
    logic [clogb2(1024)-1:0] l_cnt = '0;
    always_ff @(posedge i_clk)
    begin
        l_cnt <= l_cnt + 'd1;
    end
    assign l_b = | l_cnt;

    endmodule:demo_sv
    (3)在Vivado2018.3中综合看结果。和计算器的位宽比较,可以看到结果是吻合的。偷懒不想算位宽使用。
    (4)在包中可以定义parameter等,使用跟verilog类似。
    `ifndef DFFS_DONE
        `define DFFS_DONE
        package p_demo;
            localparam p_width = 4;
        endpackage 
        import p_demo::*;
    `endif

    `include "definitions.sv"
    module demo_sv (
        input  logic i_clk,
        output logic l_b        
    );
    logic [p_width-1:0] l_cnt = '0;
    always_ff @(posedge i_clk)
    begin
        l_cnt <= l_cnt + 'd1;
    end 
    assign l_b = | l_cnt;

    endmodule:demo_sv

    以上。

  • 相关阅读:
    Pythonday01
    PYTHON_DAY2
    PYTHON_DAY3
    数据字典生成SQL语句
    Spring cloud Netflix >readMe
    SecureCRT的安装与激活
    MyBatis映射文件UserMapper.xml(mysql环境)
    数据库模糊查询4种用法
    MyBatis配置文件myBatisconfig.xml
    计算机基础:2进制和2进制算法。
  • 原文地址:https://www.cnblogs.com/kingstacker/p/13495566.html
Copyright © 2020-2023  润新知