Tests: Add t_interface_update (#2765)

This commit is contained in:
Wilson Snyder 2026-03-29 20:52:29 -04:00
parent 86eb6f060f
commit d55790c91b
3 changed files with 78 additions and 0 deletions

View File

@ -61,6 +61,7 @@ module Testit (
.clk(clk),
.w(d[i])
);
initial fnxtclk1.init();
end
endgenerate
@ -90,4 +91,7 @@ module fnxtclk (
end
end
task init;
endtask
endmodule

View File

@ -0,0 +1,18 @@
#!/usr/bin/env python3
# DESCRIPTION: Verilator: Verilog Test driver/expect definition
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of either the GNU Lesser General Public License Version 3
# or the Perl Artistic License Version 2.0.
# SPDX-FileCopyrightText: 2026 Wilson Snyder
# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0
import vltest_bootstrap
test.scenarios('simulator_st')
test.compile()
#Nothing to test: test.execute()
test.passes()

View File

@ -0,0 +1,56 @@
// DESCRIPTION: Verilator: Verilog Test module
//
// This file ONLY is placed under the Creative Commons Public Domain.
// SPDX-FileCopyrightText: 2026 Wilson Snyder
// SPDX-License-Identifier: CC0-1.0
interface ShiftIf #(
parameter integer WIDTH,
parameter integer STAGE
);
typedef struct packed {
logic [WIDTH-1:0] data;
logic valid;
} reg_t;
reg_t data;
function automatic reg_t update(input reg_t noChange, input logic enable);
return enable == 1 ? data : noChange;
endfunction
endinterface
module automatic t #(
parameter integer WIDTH = 8,
parameter integer SHIFT_WIDTH = 2
) (
input logic logic_clk_in,
input logic sync_rst_in,
input logic [WIDTH-1:0] dataIn,
input logic validIn,
input logic enableIn,
output logic [WIDTH-1:0] dataOut,
output logic validOut
);
ShiftIf #(WIDTH, 0) shift[SHIFT_WIDTH:0] ();
ShiftIf #(WIDTH, 1) shiftTmp1 ();
ShiftIf #(WIDTH, 2) shiftTmp2 ();
always_comb begin
shift[SHIFT_WIDTH].data.data = dataIn;
shift[SHIFT_WIDTH].data.valid = validIn;
end
for (genvar i = 0; i < SHIFT_WIDTH; ++i) begin
ShiftIf #(WIDTH, i) newValue ();
always_comb newValue.data = shift[i+1].data;
always_ff @(posedge logic_clk_in) shift[i].data = newValue.update(shift[i].data, enableIn);
end
assign dataOut = shift[0].data.data;
assign validOut = shift[0].data.valid;
endmodule