Title

SystemVerilog -- 1.1 Introduction ~ tb

我们需要一个称为testbench的环境对设计运行任何类型的仿真。

What is the purpose of a testbench ?

Testbench允许我们通过仿真来验证设计的功能。它是一个容器,其中放置设计并使用不同的输入激励进行驱动。

  1. 生成不同类型的输入刺激
  2. 使用生成的激励驱动设计输入
  3. 允许设计处理输入并提供输出
  4. 以预期行为检查输出以查找功能缺陷
  5. 如果发现功能性错误,则更改设计以修复该错误
  6. 执行上述步骤,直到不再出现功能缺陷

Components of a testbench

introduction中现实的示例不是模块的、可扩展的、灵活的、甚至不是可重用的,因为 DUT 的连接方式以及信号的驱动方式。让我们看一个简单的测试平台,并尝试了解促进与 DUT 之间传输数据的各种组件。

Component Description
Generator 产生不同的输入激励以驱动 DUT
Interface 包含可驱动或监控的设计信号
Driver 驱动生成的激励到设计中
Monitor 监控设计输入输出端口以捕获设计活动
Scoreboard 检查设计输出是否具有预期行为
Environment 包含上述所有验证组件
Test 包含可以使用不同配置进行调整的环境

What is DUT ?

DUT 代表 Design Under Test,是用 Verilog 或 VHDL 编写的硬件设计。DUT 是一个术语,通常用于芯片制造后的硅后验证。在预验证中,它也被称为 Design Under Verification,简称 DUV。

// All verification components are placed in this top testbench module
module tb_top;
    // Declare variables that need to be connected to the design instance
    // These variables are assigned some values that in turn gets transferred to the design 
    // as inputs because they are connected with the ports in the design
    reg  clk;
    wire en;
    wire wr;
    wire data;

    // Instantiate the design module and connect the varibles declared above with the ports         
    // in the dsign
    design myDsn (
                  .clk(clk),
                  .en(en),
                  .wr(wr),
                  ...
                  .data(data)
                 );
    // Develop rest of the testbench and write stimulus that can be driven to the design
endmodule

WHat is an interface ?

如果设计包含数百个端口信号,则连接、维护和重用这些信号将很麻烦。相反,我们可以将所有设计输入输出端口放入一个容器中,该容器将成为 DUT 的接口。然后,可以通过此接口使用值驱动设计。

Waht is a driver ?

驱动程序是通过接口中定义的任务对 DUT 进行 pin-wiggling 的验证组件。当驱动器必须为设计驱动一些输入值时,它只需要在接口中调用预定义的值,而实际上不知道这些信号之间的时序关系。时序信息在接口提供的范围内定义。这是使测试平台更加灵活和可扩展所需的抽象级别。将来,如果接口发生变化,那么新的驱动程序可以调用相同的任务并以不同的方式驱动信号。task

How does the driver know what to drive ?

generator 是一个验证组件,可以创建有效的数据事务并将其发送给驱动程序。然后,驱动程序可以简单地通过接口驱动 generator 提供给他的数据。数据事务实现为类对象,如上图中的蓝色方块所示。驱动程序的工作是获取数据对象并将其转换为 DUT 可以理解的内容。

Why is a monitor required ?

到目前为止,人们一直在讨论如何将数据驱动到被测设备。但这只是一半,因为我们的主要目标是验证设计。DUT 处理输入数据并将结果发送到输出引脚。监视器拾取处理后的数据,将其转换为数据对象并将其发送给scoreboard。

Waht is the purpose of a scoreboard ?

scoreboard 可以具有与 DUT 行为相同的参考模型。此模型反映了 DUT 的预期行为。发送到 DUT 的输入也会发送到此参考模型。因此,如果 DUT 存在功能问题,则 DUT 的输出将与参考模型的输出不匹配。因此,比较设计和参考模型的输出将告诉我们设计中是否存在功能缺陷。这通常是在 scoreboard 上完成的。

Why is an environment required ?

它使验证更加灵活和可扩展,因为可以将更多组件插入到同一环境中,以便将来的项目使用。

What does the test do ?

测试将实例化环境的对象,并按照测试想要的方式对其进行配置。请记住,我们很可能会有数千个测试,并且对每个测试的环境进行直接更改是不可能的。相反,我们希望环境中的某些 knobs/parameters 可以针对每个测试进行调整。这样,测试将刺激的产生更好的控制,并且会更有效。

What are abstraction levels ?

在前言中,您看到我们使用单个信号切换了设计。

#5  resetn <= 0;
#20 resetn <= 1;

相反,如果您将这两个信号放在一个任务中并称其为“apply_reset”任务,则您刚刚创建了一个可以重复使用的组件,并隐藏了断言的信号和时间间隔的详细信息。这是我们在开发测试平台时希望拥有的一个功能-隐藏细节-这样测试编写者就不需要为如何使用而烦恼,而是专注于何时以及为什么应该使用这些任务。测试编写者最终使用任务、配置环境并编写代码来测试设计。

module tb_top;
    bit resetn;

    task apply_reset ();
        #5  resetn <= 0;
        #20 resetn <= 1;
    endtask

    initial begin
        apply_reset();
    end

endmodule

posted on 2024-04-13 13:22  松—松  阅读(14)  评论(0编辑  收藏  举报

导航