返回介绍

15.8 接口与时钟控制块

发布于 2020-09-09 22:55:52 字数 1601 浏览 997 评论 0 收藏 0

一个时钟控制块封装了一组共享一个基本时钟的信号,因此使用一个SystemVerilog接口说明一个时钟控制块能够显着地减少连接测试平台所需代码的数目。此外,由于测试平台内时钟控制块中信号方向是有关测试平台而不是被测设计的,一个modport声明可以恰当地描述这两个方向。一个测试平台程序可以包含在一个程序当中,并且它的端口可以是接口,这个接口对应于每个时钟控制块中声明的信号。从测试平台这一侧(也就是modport test)看接口中的连线应该与时钟控制块中声明的方向相同,而从被测设计来看则具有相反的方向(也就是modport dut)。

例如,前面的例子可以使用接口按如下的方式重新编写:

interface bus_A (input clk);
    logic [15:0] data;
    logic write;
    modport test (input data, output write);
    modport dut (output data, input write);
endinterface

interface bus_B (input clk);
    logic [8:1] cmd;
    logic enable;
    modport test (input enable);
    modport dut (output enable);
endinterface

program test(bus_A.test a, bus_B.test b);
    clocking cd1 @(posedge a.clk);
        input a.data;
        output a.write;
        inout state = top.cpu.state;
    endclocking

    clocking cd2 @(posedge b.clk);
        input #2 output #4ps b.cmd;
        input b.enable;
    endclocking

    initial begin
        // 程序从这里开始
        ...
        // 用户可以访问cd1.a.data,cd2.b.cmd等等
    end
endprogram

test模块可以被实例化并按如下方式连接:

module top;
    logic phi1, phi2;
    bus_A a(phi1);
    bus_B b(phi2);
    test main(a, b);
    cpu cpu1(a);
    mem mem1(b);
endmodule

作为选择,在上面的test程序中,时钟控制块可以使用接口和层次化表达式按如下方式编写:

clocking cd1 @(posedge a.clk);
    input data = a.data;
    output write = a.write;
    inout state = top.cpu.state;
endclocking

clocking cd2 @(posedge b.clk);
    input #2 output #4ps cmd = b.cmd;
    input enable = b.enable;
endclocking

这就使得我们能够使用较短的名字(cd1.data, cd2.cmd, …)来替代较长的接口语法(cd1.a.data, cd2.b.cmd,…)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文