zoukankan      html  css  js  c++  java
  • 如何在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

    以上。

  • 相关阅读:
    弱省胡策 Magic
    CF917D Stranger Trees
    【弱省胡策】Round #5 Count
    【BZOJ2117】 [2010国家集训队]Crash的旅游计划
    「2017 山东一轮集训 Day5」苹果树
    【SDOI2017】天才黑客
    【JXOI2018】守卫
    小程序两种图片加载方式
    小程序之底部栏设计
    小程序之全局变量的设置及使用
  • 原文地址:https://www.cnblogs.com/kingstacker/p/13495566.html
Copyright © 2011-2022 走看看