verilator/test_regress/t/t_mod_interface_clocking.v

52 lines
1.2 KiB
Systemverilog

// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain, for
// any use, without warranty, 2025 by Antmicro.
// SPDX-License-Identifier: CC0-1.0
interface axi_if;
logic clk;
wire rlast;
wire rvalid;
clocking cb @(posedge clk);
inout rlast, rvalid;
endclocking
modport md1(clocking cb, inout clk, rlast, rvalid);
modport md2(clocking cb);
endinterface
module sub (
axi_if.md1 axi1,
axi_if.md2 axi2
);
initial begin
axi1.clk = 1'b0;
#1 axi1.clk = 1'b1;
#1 axi1.clk = 1'b0;
#1 axi1.clk = 1'b1;
end
initial begin
@(negedge axi1.rvalid);
$display("[%0t] rvalid==%b", $time, axi1.rvalid);
$display("[%0t] rlast is 1: ", $time, axi1.rlast === 1);
if (axi1.rlast === 1) $stop;
$write("*-* All Finished *-*\n");
$finish;
end
initial begin
$display("[%0t] rvalid <= 1", $time);
axi1.cb.rvalid <= 1'b1;
@(posedge axi1.rvalid);
$display("[%0t] rvalid <= 0", $time);
axi1.cb.rvalid <= 1'b0;
@(negedge axi1.clk);
$display("[%0t] rlast <= 1", $time);
axi2.cb.rlast <= 1'b1;
end
endmodule
module t;
axi_if axi_vi ();
sub i_sub (.axi1(axi_vi), .axi2(axi_vi));
endmodule