当前位置 博文首页 > Tommi_Wei的博客:SYSTEM VERILOG语法学习(持续更新...)

    Tommi_Wei的博客:SYSTEM VERILOG语法学习(持续更新...)

    作者:[db:作者] 时间:2021-09-09 13:39

    SYSTEM VERILOG语法学习(持续更新…)

    学到的就要教人,赚到的就要给人!

    【常见问题】子类中出现和父类同名的变量怎么办?

    子类(继承父类)的对象(父类的部分+子类的部分)。子类的句柄可以赋值给父类,父类的句柄理论上只允许访问父类的成员变量!(这样对于编译器的内存访问是安全的,编译是允许的~)

    【常见问题——包的使用】关于package路径的问题
    在创建package的时候,已经在指定包名称的时候隐含地指定了包的默认路径,即包文件所在路径。如果有其他要被包含在包内的文件在默认路径之外,需要在编译包的时候加上额外指定的搜寻路径选项”+incdir+PATH”

    【常见问题——类的封装】this的用法
    this明确索引当前所在对象的成员(变量、参数、方法)(非静态)。当没有出现变量,我们查找的方式就近原则 !

    【常见问题——多态】virtual的用法

    SV中没有虚变量!子类不要和父类定义同名的变量~
    父类中写virtual 不会错~

    【常见问题——约束】子类对父类约束是继承还是替换

    子类如果和父类中约束保持同名,子类约束将会覆父类中的约束(以子类约束为准);子类如果和父类中约束不同名,子类将会继承父类中的约束(当然继承的过程里面要同时满足)。

    【常见问题——句柄的使用】子类中出现和父类同名的变量怎么办?
    子类(继承父类)的对象(父类的部分+子类的部分)。子类的句柄可以赋值给父类,父类的句柄理论上只允许访问父类的成员变量!(这样对于编译器的内存访问是安全的,编译是允许的~)
    在实际使用中,每一个对象都有一个句柄。有些句柄可能存储在数组或者队列中,或者在另一个对象中,例如链表。

    【常见问题——软约束】soft
    软约束就是软蛋,遇到硬约束就好怕,谁的拳头硬就听谁的。当然,要是一群软蛋的话,以最后的软约束为主。

    【常见问题——SV语法】通配符的使用
    组合逻辑中,敏感列表中的信号可以用“ * ”代替;接口或者类的实例化过程中,成员变量的省略可以采用(.*)的形式。其中’.’代表的是对其成员变量的索引。

    【常见问题——类和对象的概述】静态变量与动态变量
    静态变量至始至终都伴随这仿真的开始到结束。动态变量具有生命的周期性,如同烟花一瞬即逝,产生后就自动销毁。

    【常见问题——SV2.1 lab4】do_packet() 中调用peek的作用

    模拟参考模型,do_packet()的作用是给接收到的数据打包,但是包的长度取决于寄存器的配置。
    可是寄存器length的长度,在我们的配置中可能会发生变化!

    peek的作用是blocking,等到有第一个数据到来,怕快照,(记录此时第一个数据来了)mailbox中的数据还在,
    如果此时寄存器配置为8,我们应该等待8个数据!

    【SV2.1 lab3 chnl_pkg3】约束中的local条件不满时,会发生什么?
    意思就是,如果你不在顶层对gen里面的这几个变量进行约束配置,那么这几个变量的值就默认都是-1,也就不满足这里面local::ch_id>0的条件,后面的语句不执行,也就是说chnl_trans里的ch_id和gen里的ch_id没有关系,还是按照chnl_trans里的约束来随机!

    【常见问题——虚方法】解决句柄传递时的类型~
    关于virtual的使用很多人都不明白!什么时候要加,为什么要加。
    在父类中申明虚方法,可以实现类成员方法调用时的动态查找,
    用户无需担心使用的是父类句柄还是子类句柄,因为最终都会实现动态方法查找。
    它会看你当前的句柄指的是父类还是子类,如果是子类,它会进子类看有没有同名的方法,
    如果有它就会执行子类中方法,如果子类中没有,执行当前父类中的方法。
    路桑的建议:目前父类中添加的方法都申明成虚方法virtual!只需要声明一次即可!

    cs