zoukankan      html  css  js  c++  java
  • 使用libmap

    1 libmap的作用

    主要两个作用:

    1. 解决module名重复问题:

    比如有两个IP, IP0和IP1, 它们都例化了一个叫ADD的module, 而且它们的filelist中都包含add.v.
    这时会引起编译错误, 这时可以:
    (1) 指定IP0中的add.v编译到库lib0中, IP1中的add.v编译到库lib1中,
    (2) 指定IP0中的ADD使用库lib0, IP1中的ADD使用库lib1.

    1. 将指定模块做成空module, 用来加速仿真.

    比如module M0例化了4次, U0~U3, 如果只仿真U0, 则可以:
    (1) 做一个空module M0_DUMMY, 只保留端口信号.
    (2) M0_DUMMY编译到DUMMY库中.
    (3) 指定U1~U3使用DUMMY库.

    其实通过修改设计的方式, 也可以完成上述两个功能, 但修改设计不易维护, 或者有时无法修改原设计, 所以必须要用到libmap方法.

    2 如何使用libmap

    使用libmap有两种方法: 两步法, 三步法.

    两步法: 1) 编译(在编译阶段指定libmap), 2) 仿真.
    三步法: 1) RTL编译/tb编译, 2) elaboration, 3) 仿真.

    三步法有点麻烦.

    2.1 两步法

    2.1.1 编写dummy.v

    将a.v和b.sv复制一份, 并删去其中的内容, 只保留port声明, 文件命名为a_dummy.v和b_dummy.sv

    2.1.2 编写libmap文件

    libmap文件有两部分内容: 1) 指定哪些文件编译到DUMMY库中. 2) 指定哪些inst使用DUMMY库(这部分可以放到单独的topcfg.v文件中).

    libmap.v

    //指定哪些文件编译到DUMMY库中. DUMMY是个字符, 可以随便改成其它名字.
    library DUMMY xx/xx/a_dummy.v
    library DUMMY xx/xx/b_dummy.sv
    
    //指定哪些inst使用DUMMY库
    config lib_cfg;
        design top; //指定仿真顶层名称, 详细见2.1.5 注意1.
    
        instance top.U_A1 liblist DUMMY; //U_A1使用DUMMY库
        instance top.U_B1 liblist DUMMY; //U_B1使用DUMMY库
    
        //instance top.U_A0 liblist work; //U_A0使用work库, 默认的, 可以不设置
        //instance top.U_B0 liblist work; //U_B0使用work库, 默认的, 可以不设置
    
    endconfig
    

    2.1.3 编译

    在编译时有三点:
    (1) 指定dummy.v.
    (2) 指定libmap文件.
    (3) 指定top为config指定的名称lib_cfg(可以随便改成其它名字)

    vcs \
        -f file.lst       \ # 原本的设计
        -f file_dummy.lst \ # dummy.v
        -libmap libmap.v  \ # libmap文件
        -top lib_cfg      \ # 如果不指定lib_cfg为top, 会导致libmap有问题, 详细见2.1.5 注意2.
        ...
    

    2.1.4 仿真

    正常调用simv仿真即可. 这时top.U_A1和top.U_B1就会使用空module了.

    2.1.5 注意事项

    注意1: libmap config中design语句
    在libmap config的design语句中, design必须要指定仿真的顶层名称, 这样libmap才会正确生效.
    如果指定中间层次, 会导致libmap不成功.

    注意2: 关于仿真选项-top的问题:
    假设仿真的顶层名称是top_tb, libmap的名称是lib_cfg, 同时config中design的名称是top_tb, 这时:
    (1) 如果同时指定两个top: -top top_tb -top lib_cfg, 会导致comiple报错: "duplicate top level module is found Module top_tb".
    (2) 如果只定义一个-top top_tb, 不定义-top lib_cfg, 会导致libmap异常: 所有DUMMY library都生效了, 无法通过instance xx/U_A liblist DUMMY精细指定.
    (3) 如果只定义一个-top lib_cfg, 不定义top_tb, 这时是正常的, DUMMY library符合预期.
    (4) 如果两个top都不指定: vcs会将每个module都视为top, 而lib_cfg也不生效(其实也相当于没指定-top lib_cfg), 结果与第(2)点相同: 无法精细指定.

    2.2 三步法

  • 相关阅读:
    flex布局以及相关属性
    css 选择器
    两侧定宽,中栏自适应布局
    两列定宽,一列自适应布局
    左列定宽,右列自适应布局
    Flex接收51单片机发送过来的16进制数据转换为String
    Flex与51单片机socket通信 策略问题
    sql For XML Path
    sql多对多探讨
    JavaScript
  • 原文地址:https://www.cnblogs.com/gaiqingfeng/p/15577602.html
Copyright © 2011-2022 走看看