SV_LAB学习03篇 LAB3

本文介绍了SV_LAB的第三个实验,重点在于验证框架的搭建和测试代码test.sv的详细步骤。主要内容包括定义发送参数、驱动代码、接收任务、时序接收以及比较函数和任务,旨在实现对DUT输出的收集和比较,确保验证的准确性。

一、验证框架

到LAB3,加入一个收集机制,将从dut的输出,收集回来。

二、测试代码 test.sv

2.1  定义发送参数

比LAB2多了一个收集DUT输出用于比较的队列。

  int run_for_n_packets;      // number of packets to test
  bit[3:0] sa;                        // source address
  bit[3:0] da;                        // destination address
  logic[7:0] payload[$];              // expected packet data array

  logic[7:0] pkt2cmp_payload[$];      // actual packet data array

2.2  驱动代码

代码中重复2000:(1)生成数据,(2)发送接收数据;在结束后,调用 check() 对比。

  initial begin
  	$vcdpluson;
	run_for_n_packets = 2000;
  	reset();
	repeat(run_for_n_packets) begin
	  gen();
	  fork
	    send();
	    recv();
	  join
	  check();
	end
	repeat(10) @(rtr_io.cb);
  end
在SystemVerilog(SV)的实验室或实践练习中,通常会涵盖验证和设计两个主要方面。SystemVerilog是一种硬件描述和验证语言(HDVL),广泛用于集成电路设计和验证。以下是与SystemVerilog相关的实验室和实践练习的一些常见内容: ### 验证方面的实践练习 1. **测试平台(Testbench)的搭建**:学习如何创建一个完整的测试平台,包括驱动器(Driver)、监视器(Monitor)、代理(Agent)、环境(Environment)和序列(Sequence)等组件。这些组件通常基于UVM(Universal Verification Methodology)框架构建。 2. **随机测试生成**:利用SystemVerilog的随机约束功能生成测试用例,以验证设计在各种输入条件下的行为。 3. **覆盖率驱动验证**:通过功能覆盖率分析,确保测试用例覆盖了设计的所有关键功能点。这通常涉及编写覆盖率模型,并根据覆盖率结果调整测试用例。 4. **断言(Assertion)**:学习如何在设计中插入断言以捕获设计中的错误行为,并通过断言覆盖率评估验证的完整性。 ### 设计方面的实践练习 1. **RTL设计**:使用SystemVerilog进行寄存器传输级(RTL)设计,包括组合逻辑和时序逻辑的设计。 2. **综合优化**:学习如何编写可综合的代码,并通过工具进行优化以满足面积、功耗和时序要求。 3. **模块化设计**:实践如何将复杂的设计分解为多个模块,并通过接口(Interface)连接这些模块。 4. **参数化设计**:利用SystemVerilog的参数化功能创建可重用的设计模块。 ### 工具链的使用 1. **仿真工具**:熟悉使用仿真工具(如Cadence Incisive、Synopsys VCS、Mentor Graphics QuestaSim等)进行SystemVerilog代码的编译和仿真。 2. **综合工具**:学习如何使用综合工具(如Synopsys Design Compiler)将SystemVerilog代码转换为门级网表。 3. **调试技巧**:掌握调试SystemVerilog代码的方法,包括波形查看器的使用、日志文件的分析以及断点的设置。 ### 示例代码 以下是一个简单的SystemVerilog测试平台示例,用于验证一个加法器模块: ```systemverilog module adder ( input logic [3:0] a, input logic [3:0] b, output logic [4:0] sum ); assign sum = a + b; endmodule module testbench; logic [3:0] a; logic [3:0] b; logic [4:0] sum; // 实例化被测模块 adder uut ( .a(a), .b(b), .sum(sum) ); initial begin // 测试用例1 a = 4'b0000; b = 4'b0000; #10; $display("Sum = %b", sum); // 测试用例2 a = 4'b1111; b = 4'b0001; #10; $display("Sum = %b", sum); // 结束仿真 $finish; end endmodule ``` ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值