sv lab3学习记录

sv la3学习记录

#==================================================================================

  1. lab_tb1

在这里插入图片描述

1)generator里创建了两个maibox用来握手
① 在generator类中,先将randomize产生的随机数放到 req_mb的mailbox中(发送给initial),然后一直在这里等rsp_mb的get
在这里插入图片描述
② 在initial类中,复位后就一直get等待req_mb的数,只要有数来了,就立即执行chnl_write(发送数据),否则就一直在等待。发送完之后,将req clone给rsp,改变rsp这个类中的rsp变量为1;(注意这里有点绕,前面的rsp是个类,后面的rsp是个变量,代表数据是否已经成功发出。而且在这里插入图片描述
这个rsp变量没有rand, 不会被随机化)
将其放到rsp_mb的信箱中发送给generator类
在这里插入图片描述
完成一次握手,当generate拿到rsp.rsp = 1时候,代表数据发送成功。

为什么需要这一个bit (即rsp.rsp)?
① 因为后面对于一些复杂的总线,有的时候发送数据会成功,也有时候发送数据失败。我genenrator把数据交给了你initiator,你不仅仅需要把数据发送到总线上,而且如果发送失败,总线(interface)上一般有发送错误或者失败的标志信号,此时initiator需要将error通过put rsp写回给generator。这样的好处是:我generator不仅可以发送随机的数据给总线,而且可以通过initiator获取总线的状态,看我每次产生的激励是否真正的有效的给到了总线上(interface)。
②有时候激励也需要读数据,那么也可以通过initiator 的put rsp把总线上读的数据返回给generator。这样的好处是:我generator不仅可以发送数据,而且可以读想要的数据。

=》有个这两个fifo, 从generator到总线的数据流就从以前的单向变成了双向
在这里插入图片描述
在这里插入图片描述

2)代码中注意事项:
generator里用new()创建了两个maibox
initiator中仅仅是申明了两个mialbox的句柄,并没有创建(new)。
在这里插入图片描述
在agent中做了连接。在agent中将init中悬空的句柄和gen中创建的句柄连接起来。
在这里插入图片描述
通过mailbox沟通的双方,都需要声明mailbox的句柄,但只要一方创建即可,另外一方悬空;在更上层将双方的句柄连接起来

3)总结
从lab3开始 代码中结构发生了变化
①产生数据,产生多少次数据,完全交给generator class,agent不再过问。
在这里插入图片描述
②agent完全变成了一个盒子,只负责封装跑run;
initial 变得贪得无厌了,永远在等待,只要有邮件进来,立即发送出去;
谁可以控制停下来?initial是停不下来的,只有generator可以停下来,产生完有限的数据后就停下来退出。==》 所以这里用fork … join any(有任何一个线程执行完毕(generator),则停下来跳出)
在这里插入图片描述

#==================================================================================
2. lab3 tb2
1) 外部怎么去控制内部的?
在这里插入图片描述
通过当前generator中的随机变量来影响chal_trans中的随机变量。实现一层一层的控制。
即如果我generator中的成员变量(以pkt_id为例),我generator中的pkt_id大于0,则chnl_trans中的pkt_id就会和我generator中的值保持一致。更加方便的从外部去控制。
我只要randomize generator就可以间接控制randomize chnl_trans。

而为什么generator中我这些初始值都给负数(-1)?
=> 默认走内部chnl_trans自己去randomize,外部不去控制。

而randomize generator发生在哪里呢?
=> 发生在do_config中,所以顺序上要先do_config();
在这里插入图片描述
=> 我只要在do_config中就可以从外部去影响genenrator中的randomize,从而间接控制randomize chnl_trans
在这里插入图片描述

2)结构图
在这里插入图片描述

每一个test里边就是要实现 do_config()
I
do_config()可以randmoize每一个generator
I
generator得到randmoize,它又可以进一步randmoize req这个对象
在这里插入图片描述

自顶而下实现控制,而每个test只要改变do_config中的值即可。其他部分root_test都已经搭建好了。

3)总结
与tb1 不同:
① generator层已经从agent层中拿出来
②generator是怎么做随机化的?通过do_config事先对generator做随机化,generator里的run进一步对chnl_trans做随机化
在这里插入图片描述
① 只需要对每一个test做randmoize,接下来每一个generator怎么样randmoize里边的chnl_trans,怎么样把generator发送给initial,每个test都不需要担心,因为这些都全部交给了root_test。==》每个test只需要改do_config就行
root_test整个结构都是确定下来的,各个test不同的部分只有do_config不同

② 当修改test时候,不再需要重复的编译,
通过vsim +TESTNAME=chnl_burst_test work.tb3_ref 指令,就可以选择哪一个软件盒子。大大方便且减少了重复编译的时间。
在这里插入图片描述在这里插入图片描述
vsim +TESTNAME=chnl_burst_test work.tb3_ref

加上之前的随机种子,应该是
vsim -novopt -solvefaildebug -sv_seed random +TESTNAME=chnl_burst_test work.tb3_ref

在这里插入图片描述

③ 实验2(lab2)中 每个句柄都会被放到这个队列中,即所有的对象都不会销毁。这种代码习惯不好,仅仅可以用来调试,即我跑完以后,用一个循环语句打印出来。
在这里插入图片描述
而lab3用的打乒乓球(boxmail)的方式将句柄传递,减少内存消耗。

#==================================================================================
3. lab3 tb3
1)逻辑框图
层次结构图
在这里插入图片描述
代码结构图
在这里插入图片描述
root test 结构图
在这里插入图片描述
2)相关问题归纳
① checker时,为什么要先从out里边拿数据?
只有从输出的数据中才能知道该数据是从哪个通道过来的,然后再去拿这个通道的in数据
在这里插入图片描述
② 调试的时候发现ch_id永远是0。注意这里打印的是chnl_trans的值。
在这里插入图片描述
gen中做的是req 的随机化,而req的约束中ch_id=0;
在这里插入图片描述
下面是generator的类
在这里插入图片描述
路桑有个小的疏漏,没有将gen[0]-gen[2],分别分配三个chnl_id。框框中的内容是我自己加进去的。否则导致所有的数据通道都是0。
在这里插入图片描述

SV Lab Guide是一个全面指南,旨在帮助用户理解和操作各种与存储虚拟化相关的技术、工具和实践。这类指导通常涉及从基础理论到高级应用的各种层面,包括但不限于: ### 存储虚拟化的概念 - **理解存储虚拟化**:首先,了解什么是存储虚拟化以及它如何将物理磁盘空间整合为一组统一的资源池,可以由多个主机访问,提高资源利用率和灵活性。 ### 技术概览 - **传统存储设备与现代虚拟化解决方案**:比较传统的存储阵列与基于软件的虚拟化平台的区别,如NAS(网络附加存储)、SAN(存储区域网络)等。 - **关键技术组件**:解释诸如快照、复制、分级存储、数据缩减、远程复制等技术是如何工作的,以及它们如何优化性能和成本。 ### 实践操作 - **配置步骤**:提供从安装虚拟化管理软件、配置存储池、设置策略到实际部署和管理环境的具体步骤。 - **安全性和合规性**:讨论如何保护存储资源免受攻击,并满足行业标准和法规要求,比如数据加密、访问控制和审计日志记录。 ### 性能优化与故障排除 - **性能监控与调优**:讲解如何监控存储系统的性能指标,识别瓶颈并采取措施进行优化。 - **常见错误及解决策略**:列举可能出现的问题及其解决办法,帮助快速定位和修复故障。 ### 迁移与集成 - **从传统架构向虚拟化迁移**:提供详细的规划、实施和验证过程,确保平稳过渡。 - **与其他系统集成**:探讨如何将存储虚拟化解决方案与现有的IT基础设施(如服务器、操作系统、云服务等)无缝连接。 ### 高级主题与未来趋势 - **人工智能与自动化**:展望AI如何应用于自动优化存储配置、预测维护需求等领域。 - **边缘计算与分布式存储**:讨论分布式存储架构如何支持边缘计算场景,以及其带来的挑战和机遇。 ### 结论 SV Lab Guide是一个动态文档,随新技术的发展不断更新完善。通过这个指南,用户能够深入理解存储虚拟化的价值,掌握其实现细节,并有效地利用其提升业务效率和安全性。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ethan_WC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值