学习问题记录5 目录1SystemVerilog 中class 可以在 program、module 和 package 中声明。2SystemVerilog 中logic只能单驱动多驱动要使用wire类型。3tb功能4bit[31:0] a[*]是关联数组内部元素默认为整形5inout端口5UVM_mirror6使用unsigned7shuffle函数8local函数/任务使用10struct1SystemVerilog 中class 可以在program、module和package中声明。建议在package中声明其他位置声明只能在该作用域使用package可以通过import在其他作用域使用。program可以包含package2SystemVerilog 中logic只能单驱动多驱动要使用wire类型。3tb功能·产生激励应用在DUT·捕捉DUT的输出并检测正确性·根据验证目标衡量进度4bit[31:0] a[*]是关联数组内部元素默认为整形执行a[100]10;后a.num()/a.size()输出为1。当声明为bit[31:0] a[]是动态数组执行a[100]10;后a.num()/a.size()输出为101前面100个值为默认值32’b0。5inout端口双向总线允许多个设备在不同时间共享同一组物理线路当inout端口不需要驱动总线即不需要读出output要将该inout端口设置为高阻态此时该端口类似input端口(总线-模块内部)在物理硬件层面inout端口通常综合为三态缓冲器Tri-State Buffer。三态缓冲器有三个输出状态0低电平1高电平Z高阻态 - 断开使能信号控制这个缓冲器是工作在驱动模式0或1还是高阻模式Z。这是实现共享总线在物理电路上的基础。5UVM_mirror寄存器模型RGM的“镜像值”mirrored value旨在反映软件认为的硬件寄存器状态将rgm中镜像值更新为硬件实际值。mirror(status, UVM_CHECK)常用于update后检查在读取硬件值之后它会将读取到的硬件值与寄存器模型中当前的镜像值期望值进行比较不匹配它会报告一个错误uvm_error。但对于只读寄存器或只读片段实际上通常不会报错。在mirror操作执行UVM_CHECK比较时会跳过或忽略只读寄存器或只读字段的比较跳过check。6使用unsigned扩大数值范围相同位宽无符号类型能表示更大的正整数范围int有符号-2³¹ 到 2³¹-1约 -21亿 到 21亿uint无符号0 到 2³²-10 到 42亿乘法效率更高移位只需要逻辑移位7shuffle函数array.shuffle()随机化数组元素顺序随机打乱数组元素的顺序直接修改原数组8local函数/任务使用class Parent; //父类 task A(); B(); // 调用local方法 endtask local task B(); $display(Parent::B executed); endtask endclass class Child extends Parent; // 子类可以调用A()但无法访问/覆盖B() A(); endclass子类调用A()时实际执行的是父类中的A()实现A()内部调用的B()仍然是父类中的local task B子类无法修改这个行为如果子类定义同名task B它只是独立的新方法与父类的local task B无任何关联10struct10.1struct(非 packed)类似软件结构体可能有填充字节总位宽不确定可能按字节/字对齐10.2struct packed紧密压缩总位宽 所有成员位宽之和按位对齐如struct packed中有[31:0]data,[31:0]addr则这个struct packed有64位并且可以直接用struct packed进行对比按位比较所有64位