路科验证-实验一详细步骤

一.题目要求

1.从verilog到sv

(1)将tb1修改为tb1.sv,按照之前的步骤进行仿真,查看仿真的行为是否同tb1.v相似,结果说明什么?
(2)将信号变量类型由reg或者wire修改为logic类型,再仿真编译看是否与之前的行为相似,这是为什么?
(3)在步骤的基础之上,将rstn的类型由logic改成bit类型,再仿真编译,行为是否和步骤2一致呢,为什么?

2.方法task和函数function

在tb2.sv文件中,可以看出不同于tb1.sv文件的是,之前产生时钟和发起复位的两个Initial过程快语句都被两个task即clk_gen()和rstn_gen()取代了,完成实验的部分:
(1)不做修改的情况下,对tb2.sv进行编译仿真,时钟信号和复位信号还正常吗?为什么?
(2)同学们在路桑标记的两个initial块中分别调用产生时钟和复位的task,再编译仿真查看时钟信号和复位信号,是否恢复正常呢?
(3)为什么要将两个task和两个initial块中调用,这是为什么呢?是否可以在一个initial块中调用呢?如果可以,调用的顺序是什么?
(4)同学们是否可以读出目前时钟的周期和频率呢?如何测量呢?如果我们想进化clk_gen()方法,使其变为可以设置时钟周期的任务clk_gen(20),看看波形中的时钟周期是否变为20ns呢?
(5)如果将’timescale 1ns/1ps修改为’timescale 1ps/1ps,那么仿真中的时钟周期是否发生变化了呢,这是为什么呢?

3.数组的使用

(1)如果现在要求同学们对每一个slave的数据发出100个数,那么如何实现呢?
(2)如果现在生成100个数,并对它们按照目前的数值规则进行赋值,请同学们创建3个动态数组,分别放置要发送3个slave的数据。
(3)接下来利用生成的数组数据,将他们读取并发送给三个channel。

4.验证结构

在这里插入图片描述

二.从verilog到sv实验步骤

1.问题一实验步骤

(1)新建工程

  • 注意不要出现中文路径
    在这里插入图片描述
    (2)导入文件
  • add Existing File
    在这里插入图片描述

(3)编译仿真

  • 仿真编译的时候首先编译设计文件arbiter.v和slave.fifo.v,然后编译mcdt.v,最后编译tb1.v,
    )
  • 编译使用complie Selected
    在这里插入图片描述

(4)查看波形

  • 使用simulate without Optimization
    在这里插入图片描述
  • 点击dut,添加波形,使用鼠标的滚轮键,然后点击上边的run,可以设置run的时间
    其中信号的后缀为 -i是输入信号,-o是输出信号,-s是内部信号
    在这里插入图片描述
  • 修改为sv后缀之后跑仿真
    在这里插入图片描述
  • 结果相同,说明sv支持所有关于verilog的语法

2.问题二步骤

(1)新建工程,添加工程,仿真,添加波形,这些都省略了哈,改修变量为logic之后,直接给出仿真结果对比
在这里插入图片描述
在这里插入图片描述

  • 结果相同,logic简化了变量的行为

3.问题三步骤

  • 将logic修改为bit,观察rstn的变化
    在这里插入图片描述
    在这里插入图片描述
  • 结果相同,不知道为啥,我没看出变化

三.方法task和函数function实验步骤

1.问题一步骤

在这里插入图片描述

  • 对tb2.sv进行编译,时钟信号和复位信号不正常,原因为:task中的时钟复位未调用

2.问题二步骤

(1)添加两个代码

// clock generation
task clk_gen();
  clk <= 0;
  forever begin
    #5 clk<= !clk;
  end
endtask

initial begin
  clk_gen();
end

// reset trigger
// create task rstn_gen()
task rstn_gen();
  #10 rstn <= 0;
  repeat(10) @(posedge clk);
  rstn <= 1;
endtask

initial begin
  rstn_gen();
end

(2)仿真结果
在这里插入图片描述

  • 恢复正常

3.问题三步骤

  • clk_gen()和rstn_gen()不可以放在一个initial块里面,时钟在前只有时钟,没有复位,如果复位在前,只有复位没有时钟
  • 原因:显然仿真波形里面只产生了clock时钟信号,并没有产生复位信号,这是因为多个initial块是并行的,而把时钟信号和复位信号放在一个initial块里面,在initial块内部的执行顺序是串行的,执行clk_gen()时,forever会一直执行,不断产生时钟信号,导致rstn_gen()方法无法调用执行。
    在这里插入图片描述
    在这里插入图片描述

4.问题四步骤

(1)修改代码为

task clk_gen(int peroid);
  clk <= 0;
  forever begin
    #peroid clk<= !clk;
  end
endtask

initial begin
	clk_gen(20);
end

(2)仿真结果

  • 待定

5.问题五步骤

(5)如果将’timescale 1ns/1ps修改为’timescale 1ps/1ps,那么仿真中的时钟周期是否发生变化了呢,这是为什么呢?

在这里插入图片描述

在这里插入图片描述

  • 没有发生变化,原因:暂时不知道

四.数组的使用

(1)如果现在要求同学们对每一个slave的数据发出100个数,那么如何实现呢?
(2)如果现在生成100个数,并对它们按照目前的数值规则进行赋值,请同学们创建3个动态数组,分别放置要发送3个slave的数据。

1.问题一步骤

如果要对每一个channel发送100个数据或者更多个数据,可以创建动态数组,分别放置要发送给每一个channel的数据

logic [31:0] chnl0_arr[];
logic [31:0] chnl1_arr[];
logic [31:0] chnl2_arr[];

2.问题二步骤

然后每个动态数组要事先生成数据

initial begin
  chnl0_arr = new[100];
  chnl1_arr = new[100];
  chnl2_arr = new[100];
  foreach(chnl0_arr[i]) begin
    chnl0_arr[i] = 'h00C0_00000 + i;
	chnl1_arr[i] = 'h00C1_00000 + i;
	chnl2_arr[i] = 'h00C2_00000 + i;
  end
end

3.问题三步骤

接下来利用数组生成的数据,读取数据并发送给每一个channel

initial begin 
  @(posedge rstn);
  repeat(5) @(posedge clk);
  // channel 0 test
  // TODO use chnl0_arr to send all data
  foreach(chnl0_arr[i]) chnl_write(0, chnl0_arr[i]);

  // channel 1 test
  // TODO use chnl1_arr to send all data
  foreach(chnl1_arr[i]) chnl_write(1, chnl1_arr[i]);

  // channel 2 test
  // TODO use chnl2_arr to send all data
  foreach(chnl2_arr[i]) chnl_write(2, chnl2_arr[i]);

end
  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
SystemVerilog的听课学习笔记,包括讲义截取、知识点记录、注意事项等细节的标注。 目录如下: 第一章 SV环境构建常识 1 1.1 数据类型 1 四、二值逻辑 4 定宽数组 9 foreach 13 动态数组 16 队列 19 关联数组 21 枚举类型 23 字符串 25 1.2 过程块和方法 27 initial和always 30 function逻辑电路 33 task时序电路 35 动态 静态变量 39 1.3 设计例化和连接 45 第二章 验证的方法 393 动态仿真 395 静态检查 397 虚拟模型 403 硬件加速 405 效能验证 408 性能验证 410 第三章 SV组件实现 99 3.1 接口 100 什么是interface 101 接口的优势 108 3.2 采样和数据驱动 112 竞争问题 113 接口中的时序块clocking 123 利于clocking的驱动 133 3.3 测试的开始和结束 136 仿真开始 139 program隐式结束 143 program显式结束 145 软件域program 147 3.4 调试方法 150 第四章 验证的计划 166 4.1 计划概述 166 4.2 计划的内容 173 4.3 计划的实现 185 4.4 计划的进程评估 194 第五章 验证的管理 277 6.1 验证的周期检查 277 6.2 管理三要素 291 6.3 验证的收敛 303 6.4 问题追踪 314 6.5 团队建设 321 6.6 验证的专业化 330 第六章 验证平台的结构 48 2.1 测试平台 49 2.2 硬件设计描述 55 MCDF接口描述 58 MCDF接口时序 62 MCDF寄存器描述 65 2.3 激励发生器 67 channel initiator 72 register initiator 73 2.4 监测器 74 2.5 比较器 81 2.6 验证结构 95 第七章 激励发生封装:类 209 5.1 概述 209 5.2 类的成员 233 5.3 类的继承 245 三种类型权限 protected/local/public 247 this super 253 成员覆盖 257 5.4 句柄的使用 263 5.5 包的使用 269 第八章 激励发生的随机化 340 7.1 随机约束和分布 340 权重分布 353 条件约束 355 7.2 约束块控制 358 7.3 随机函数 366 7.4 数组约束 373 7.5 随机控制 388 第九章 线程与通信 432 9.1 线程的使用 432 9.2 线程的控制 441 三个fork...join 443 等待衍生线程 451 停止线程disable 451 9.3 线程的通信 458 第十章 进程评估:覆盖率 495 10.1 覆盖率类型 495 10.2 功能覆盖策略 510 10.3 覆盖组 516 10.4 数据采样 524 10.5 覆盖选项 544 10.6 数据分析 550 第十一章 SV语言核心进阶 552 11.1 类型转换 552 11.2 虚方法 564 11.3 对象拷贝 575 11.4 回调函数 584 11.5 参数化的类 590 第十二章 UVM简介 392 8.2 UVM简介 414 8.3 UVM组件 420 8.4 UVM环境 425
### 回答1: 实验2的核心目标是验证SV路科验证V2Pro的性能和功能。SV路科验证V2Pro是一种设备或系统,用于对特定产品或技术进行验证和测试,以确保其达到预期的安全性、可靠性和性能要求。 在实验2中,我们将对SV路科验证V2Pro进行一系列测试,以验证其在实际应用中的性能和功能。这些测试可能包括但不限于以下方面: 1. 安全性测试:我们将对SV路科验证V2Pro的安全功能进行测试,以确保其能够有效地保护系统和数据的机密性、完整性和可用性。 2. 性能测试:我们将对SV路科验证V2Pro的性能进行定量测试,包括处理速度、响应时间等指标,以确保其能够在实际应用中提供足够的性能。 3. 兼容性测试:我们将测试SV路科验证V2Pro与其他设备或系统的兼容性,以保证其能够与其他设备或系统进行有效的协同工作。 4. 可靠性测试:我们将对SV路科验证V2Pro的可靠性进行测试,包括长期运行测试和容错测试,以确保其能够在不同环境条件下保持稳定的运行。 5. 功能测试:我们将对SV路科验证V2Pro的各项功能进行测试,包括但不限于数据采集、数据分析、故障诊断等,以确保其能够满足用户的需求。 通过上述测试,我们将能够全面评估SV路科验证V2Pro的性能和功能,从而确定其是否符合预期要求。这对于确保产品或技术的质量和可靠性至关重要,也能够为用户提供更好的使用体验。 ### 回答2: SV路科验证V2Pro 实验2是一项验证科学研究中常用的实验方法,可以用于检验某种新的药物或理论的有效性和安全性。该实验主要包括以下步骤: 首先,实验人员需要准备好实验所需的材料和设备。这包括药物样品、动物模型或细胞培养基等。 然后,实验人员按照一定的实验设计将动物模型或细胞培养基分为实验组和对照组。实验组会接受要验证的药物或理论的处理,而对照组则接受安慰剂或常规处理。 接下来,实验人员根据实验设计的要求,给予实验组和对照组不同的处理或操作。这可以包括给动物模型注射药物、观察细胞培养基的变化等。 在给予不同处理后,实验人员通过观察和记录实验组和对照组的变化,来评估要验证的药物或理论的效果和安全性。 最后,实验人员根据实验数据进行数据分析和统计,以确定要验证的药物或理论是否达到预期的效果。分析包括比较实验组和对照组之间的差异,以及与先前的实验结果进行比较。 总之,SV路科验证V2Pro 实验2是一种常用的验证新药物或理论有效性和安全性的实验方法。通过严格的实验设计和数据分析,可以评估要验证的药物或理论的效果,并为进一步的研究和应用提供参考依据。 ### 回答3: SV路科验证V2Pro实验2的具体内容是什么,没有提供详细信息,无法进行具体回答。SV路科验证V2Pro实验2可能是一个科学实验或者项目,需要提供更多的背景信息和细节才能进行回答。请提供更多详细信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

马志高

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

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

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

打赏作者

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

抵扣说明:

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

余额充值